【发布时间】:2010-10-20 16:32:49
【问题描述】:
如果声明一个带有retain属性的属性,是否需要先释放该属性再设置为nil?
@synthesize 指令有什么作用?
【问题讨论】:
标签: objective-c cocoa ios4
如果声明一个带有retain属性的属性,是否需要先释放该属性再设置为nil?
@synthesize 指令有什么作用?
【问题讨论】:
标签: objective-c cocoa ios4
在您的属性 var 中设置另一个对象或 nil 之前,您确实需要释放(保留的)对象,但如果您愿意,这是由访问器完成的。
self.myVar = nil;
@synthesize 所做的是自动为您创建访问器方法(如果您没有定义它们)
所以,如果你把你的财产写成:
@property (nonatomic, retain) NSObject *property;
那么您可以认为合成访问器将与以下内容等价(我之所以说等价是因为我们当然不知道这是如何完成的...有关更多信息,请阅读下面的文档):
- (void) setProperty:(NSObject *)aProperty{
if(property != aProperty){
[property release];
property = [aProperty retain];
}
}
- (NSObject*) property{
return property;
}
这部分非常重要,我建议花尽可能多的时间来了解这一点。 (另请阅读副本和分配)
【讨论】:
您不需要在将保留属性设置为 nil 之前释放它,只要您使用为您执行释放的 setter。如果你用retain 声明了一个属性,合成的setter 将为你完成释放。这将我们带到了@synthesize 指令。它只是告诉编译器使用您在@property 中指定的属性为您编写setter 和getter。
【讨论】:
有关更多信息,我建议您阅读the relevant page in the guide。
【讨论】: