0

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

self.variable = value;

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

variable = [value retain];

在这两种情况下,变量都是定义为的属性:

@property (nonatomic, retain) TYPE variable;

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

谢谢,威廉

4

2 回答 2

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];
    }
}

这有帮助吗?

于 2010-09-20T14:55:28.310 回答
1

它们通常在记忆方面是等效的。编译器self.variable = value转换[self setVariable:value]为然后调用生成的设置器(如果您使用@synthesize)并为您保留它。

于 2010-09-20T14:50:34.070 回答