0

私はObjectiveCを学ぼうとしています。コンパイラが舞台裏で生成する次のコードに出くわしました。@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_?が指すオブジェクトを保持したいので、上記の構文が使用されない理由を教えてください。

4

2 に答える 2

3

それらは同じです(両方とも正しいです)。オブジェクトをコピーしないでください。retainは保持されたものと同じポインタを返すため、より短く、よりクリーンに記述できます。

ivar = [newObj retain];

オブジェクトを個別に割り当てて保持するよりも。

于 2012-08-15T06:15:33.760 に答える
2

どちらの構文も正しいです。最初のケースでは、myField割り当て[newValue retain]られているため、が指すオブジェクトも保持します。

于 2012-08-15T06:18:08.247 に答える