0

クラスメソッド内のプロパティにリンクされたプライベートにアクセスすることはivar、合成されたゲッター/セッターメソッドを使用するよりも効率的ですか、それとも効率はまったく同じですか? ...次のように:


@implementation MyApp

@synthesize name;

- (void)loadView 
{
    _name = @"Savagewood"; // VS.
    self.name = @"Savagewood";
}

@end

後者は実行に時間がかかると思いますが、アプリ開発者が一貫性と優れたプログラミング手法のために使用することを提案しているものと、両方の割り当てが基本的に同じ時間の複雑さであるかどうかを知りたいです。

4

2 に答える 2

2

一般に、可能な限りプロパティ アクセサーを使用し、インスタンス変数の直接使用をアクセサー メソッド、init メソッド、および dealloc (ARC を使用していない場合) に限定することをお勧めします。逆に、init および dealloc でアクセサーを呼び出すことは避け、独自のアクセサー メソッド内から実装しているプロパティのアクセサーを使用することは避けてください。

于 2014-07-09T21:51:17.733 に答える
2

後者は、実際にはプロパティのセッター メソッドを呼び出しますname。セッターを次のようにオーバーライドすると

- (void)setName:(NSString*)name {
  NSLog(@"New name: %@", name);
  _name = name;
}

ivar を直接設定しても何も記録されないことがわかりますが、後者はログをトリガーします。

コストに関しては、 ivar を設定する方が安いと言えますが、節約できるコストはほとんど無視できます。私のアプローチは、オブジェクトのプロパティに KVO が必要な場合など、必要な場合にのみプロパティを使用することです。それ以外の場合は、常に ivar を使用します。

于 2014-07-09T21:37:32.163 に答える