何时使用self以及何时使用retain

时间:2010-09-20 14:48:08

标签: objective-c memory-management properties retain

我正在通过“开始iPad开发”Apress书籍,并注意到有时当作者为他们将使用的属性分配值时:

self.variable = value;

和其他时候,他们将使用:

variable = [value retain];

在这两种情况下,变量是一个定义为:

的属性
@property (nonatomic, retain) TYPE variable;

我想知道是否有人知道为什么要这样做以帮助我更好地理解

谢谢,  威廉

2 个答案:

答案 0 :(得分:3)

如果您要定义自己的setter方法,则使用第二种形式的地方。你不能在那里分配self.variable,因为你将递归地调用setter。所以例如这是错误的:

-(void)setVariable:(TYPE*)value {
    if (value != variable) {
        [variable release];
        self.variable = [value retain]; // WRONG! Calls 
                                        // [self setVariable:[value retain]]
    }
}

这是对的:

-(void)setVariable:(TYPE*)value {
    if (value != variable) {
        [variable release];
        variable = [value retain];
    }
}

这有帮助吗?

答案 1 :(得分:1)

它们通常与记忆相当。编译器将self.variable = value转换为[self setVariable:value],然后调用生成的setter(如果你正在使用@synthesize)并为你保留它。