-1

私はARCベースのプロジェクトに取り組んでいます。self の主な用途は何ですか?

私は次のような配列を持っています

@property(strong,nonatomic)NSMutable *dataArray;

次のように配列を初期化しています

-(void)viewDidLoad{

 self.dataArray=[[NSMutableArray alloc]initWithObjects:@"one",@"two",nil];  //first method

}

また

-(void)viewDidLoad{

 dataArray=[[NSMutableArray alloc]initWithObjects:@"one",@"two",nil];  //second method

}

私の最初の方法と2番目の方法の違いは何ですか?

4

2 に答える 2

4

最初の呼び出し:self.dataArray = ...のアクセサ メソッドを次のselfように呼び出します。[self setDataArray:...]

2 番目の呼び出し:dataArray = ...という名前のインスタンス変数 (ivar) の内容を定義しますdataArray

それは同じことではありません。

于 2012-10-10T11:45:11.897 に答える
1

たくさんグーグルした後、私は私の質問に対する答えを見つけました、

@property(非アトミック、保持)NSDate * timestamp;

Objective Cは、次のようにゲッターとセッターを生成します

(NSDate *)timestamp
{
   return timestamp;
}

(void)setTimestamp:(NSDate *)newValue
{
   if (timestamp != newValue)
   {
      [timestamp release];

      timestamp = [newValue retain];
   }
}

setterメソッドは、次のようにのみ呼び出すことができます

self.timestamp=[NSDate日付];

一方

タイムスタンプ=[NSDate日付];

setterメソッドを呼び出しません。

自己オブジェクトとドットがないと、オブジェクトにメッセージを送信しなくなりますが、

タイムスタンプという名前のivarに直接アクセスします。

結論:自己を使用しない場合、セッターが原因で古い値は解放されません

メソッドは呼び出されません。つまり、ARCより前ですが、ARCではこれについてはよくわかりません。

私が聞いたように、ARCでは、メモリ管理に関しては、ivarを設定するどちらの方法も正しいです。

懸念しています。

于 2012-10-10T12:06:54.937 に答える