我正在阅读“开始 iPad 开发”Apress 书,并注意到有时当作者为他们将使用的属性分配值时:
self.variable = value;
在其他时候,他们将使用:
variable = [value retain];
在这两种情况下,变量都是定义为的属性:
@property (nonatomic, retain) TYPE variable;
我想知道是否有人知道为什么要这样做以帮助我更好地理解
谢谢,威廉
我正在阅读“开始 iPad 开发”Apress 书,并注意到有时当作者为他们将使用的属性分配值时:
self.variable = value;
在其他时候,他们将使用:
variable = [value retain];
在这两种情况下,变量都是定义为的属性:
@property (nonatomic, retain) TYPE variable;
我想知道是否有人知道为什么要这样做以帮助我更好地理解
谢谢,威廉
使用第二种形式的一个地方是,如果您要定义自己的 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];
}
}
这有帮助吗?
它们通常在记忆方面是等效的。编译器self.variable = value
转换[self setVariable:value]
为然后调用生成的设置器(如果您使用@synthesize)并为您保留它。