0

我正在尝试学习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 上调用保留?相反,应使用以下语法:

myField_ = newValue;
[myField_ retain];

请告知为什么不使用上述语法,因为根据我的理解,我们想保留 ? 指向的对象myField_

4

2 回答 2

3

它们是相同的(两者都是正确的)。您不复制对象 - 保留返回与保留相同的指针,因此编写起来更短更简洁

ivar = [newObj retain];

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

于 2012-08-15T06:15:33.760 回答
2

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

于 2012-08-15T06:18:08.247 回答