ViewDidLoad方法不保留一个变量?

问题描述:

这里是我的问题:ViewDidLoad方法不保留一个变量?

viewDidLoad方法创建使用NSUserDefaults一个变量(如果它的“第一跑”创建它,并NSNumber填充它。然后我尝试另一种方法来使用它,。什么都没有。它看起来像它的空。任何人都可以帮我吗?地块由于

- (void)viewDidLoad { 

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 

if ([defaults objectForKey:@"seriesBool"]!=nil) 

{ 
    seriesBool = [defaults objectForKey:@"seriesBool"]; 

} 

else 

{ 
    int i; 

    seriesBool = [NSMutableArray arrayWithCapacity:9]; 

    for(i=0; i<9; i++) 

    { 
     [seriesBool addObject:[NSNumber numberWithBool:YES]]; 

    } 

} 


-(IBAction)toAction:(id)sender 
{ 
NSLog(@"array: %@", seriesBool); 
} 

seriesBool是空的......

+0

您是否使用ARC或MRR? – *foe 2012-08-07 12:18:25

+0

我认为在这种情况下并不重要。由于他没有使用强大的财产,也没有保留iVar,所以iVar正在被释放。 – 2012-08-07 12:21:52

+0

@BrunoKoga你怎么知道他没有使用'strong'? – *foe 2012-08-07 12:22:24

你需要学习我的第一个基础管理。基本上,发生了什么事情,你不保留系列滚轮iVar。

到这里看看:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

尽量保留你的伊娃,或更好,营造浓厚的/保留属性,并使用存取方法。

+0

是的。我没有保留它。我认为当你在接口中编写属性时:@property(nonatomic,retain)NSMutableArray * seriesBool;它已经保留了。但事实并非如此。感谢所有的答案。我会先学习这个指南;) – user1581885 2012-08-07 12:52:19

必须设置属性等

@property(nonatomic,retain) NSMutableArray * seriesBool; 

,并用它

self.seriesBool = [NSMutableArray的arrayWithCapacity:9];

使用

seriesBool = [[NSMutableArray alloc] initWithCapacity:9]; 

,而不是

seriesBool = [NSMutableArray arrayWithCapacity:9]; 

& u必须alloc和分配对象

seriesBool = [[NSMutableArray alloc] init]; 
seriesBool = [defaults objectForKey:@"seriesBool"];