2011-08-28 95 views

回答

3

请注意你的标准事情,让你回到保留的对象,方法与分配,复制或新的。当您将这些与您的财产一起调用时,您可能会无意中造成泄漏。

在你的界面,你有

@property (nonatomic, retain) NSArray *someArray; 

而在你执行你有

@synthesize someArray; 

再后来你所使用的财产

self.someArray = [[NSArray alloc] init]; 

你的对象现在有一个保留从使用self.someArray = 1和从alloc中的一个计数为2。 self.someArray =调用你的setter,它和 - (void)setSomeArray相同:(NSArray)someArray;这是用合成为你创造的。由于您在@property声明中使用了retain关键字,这将包含一个保留。

我倾向于避免这两种方式之一。

要么使用自动释放初始化器

self.someArray = [NSArray array]; 

self.someArray = [[[NSArray alloc] init] autorelease]; 

,或者使用一个临时变量

NSArray tempArray = [[NSArray alloc] init]; 
self.someArray = tempArray; 
[tempArray release]; 

所有这些方法你会留下你的self.someArray对象保留数为1,您可以在dealloc中处理。

- (void)dealloc { 
[someArray release]; 
[super dealloc]; 
} 
0

有一件事帮了我很多忙,就是用保留类型检查头文件的属性定义,然后确保在-dealloc方法中有每个版本的发行版。

对于在对象生命周期中对属性的各种赋值,自动合成的设置者应该照顾它。