这是正确的语法,myField_ = [newValue retain]?

时间:2012-08-15 06:05:00

标签: iphone objective-c

我正在尝试学习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_指向的对象?

2 个答案:

答案 0 :(得分:3)

它们是相同的(两者都是正确的)。你没有复制对象 - retain返回保留的相同指针,所以写的更短更清晰

ivar = [newObj retain];

而不是单独分配和保留对象。

答案 1 :(得分:2)

两种语法都是正确的。在第一种情况下,我们还保留myField指向的对象,因为我们将[newValue retain]分配给它。