iPhone有关属性的问题

时间:2010-10-20 16:32:49

标签: objective-c cocoa ios4

如果声明具有retain属性的属性,是否需要在将属性设置为nil之前释放该属性?

@synthesize指令有什么作用?

3 个答案:

答案 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;
}

这部分非常重要,我建议花大部分时间来了解这一点。 (另请阅读复制和分配)

Apple doc on Properties

答案 2 :(得分:0)

  1. 不,实际上你根本不需要发布它。那将是一个错误。你甚至不必将它设置为nil,除非你真的想要控制它何时发布(在你自己的类发布之前,就是这样)。
  2. 为您创建getter和setter方法,可能是以优化的方式。
  3. 有关详细信息,建议您阅读the relevant page in the guide