我正在通过“开始iPad开发”Apress书籍,并注意到有时当作者为他们将使用的属性分配值时:
self.variable = value;
和其他时候,他们将使用:
variable = [value retain];
在这两种情况下,变量是一个定义为:
的属性@property (nonatomic, retain) TYPE variable;
我想知道是否有人知道为什么要这样做以帮助我更好地理解
谢谢, 威廉
答案 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)并为你保留它。