如果声明具有retain属性的属性,是否需要在将属性设置为nil之前释放该属性?
@synthesize指令有什么作用?
答案 0 :(得分:2)
只要您使用为您执行发布的setter,就不需要在将保留属性设置为nil
之前释放它。如果您已声明具有retain
的属性,则合成的setter将为您执行发布。这带来了@synthesize
指令。它只是告诉编译器使用您在@property
中指定的属性为您编写setter和getter。
答案 1 :(得分:2)
您需要在属性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;
}
这部分非常重要,我建议花大部分时间来了解这一点。 (另请阅读复制和分配)
答案 2 :(得分:0)
有关详细信息,建议您阅读the relevant page in the guide。