我正在尝试学习Objective C.我遇到了以下代码,编译器在@property(nonatomic, retain) NSString* myField
-(NSString*) myField
{
return myField_; //assuming myField_ is the name of the field.
}
-(void) setMyField:(NSString*) newValue
{
if(newValue != myField_)
{
[myField_ release];
myField_ = [newValue retain];
}
}
现在我的问题是;为什么要在newValue上调用retain?而是应该使用以下语法:
myField_ = newValue;
[myField_ retain];
请告知为什么不使用上述语法,因为根据我的理解,我们希望保留myField_
指向的对象?
答案 0 :(得分:3)
它们是相同的(两者都是正确的)。你没有复制对象 - retain返回保留的相同指针,所以写的更短更清晰
ivar = [newObj retain];
而不是单独分配和保留对象。
答案 1 :(得分:2)
两种语法都是正确的。在第一种情况下,我们还保留myField
指向的对象,因为我们将[newValue retain]
分配给它。