2

これが必ずしも @properties だけに当てはまるとは限らないことは理解していますが、最も一般的な使用例です。ある場合、例えば:

@property (strong) NSObject *object;

...

@synthesize object = _object;

init次のように、宣言されているクラスのメソッドで初期化することができます。

- (id)init {
    self = [super init];
    if (self) {
        _object = [[NSObject alloc] init];
    }
}

またはゲッターをオーバーライドして、最初の使用時に初期化します。

- (NSObject *)object {
    if (!_object) {
        _object = [[NSObject alloc] init];
    }
    return _object;
}

これらのうち、どれを使用するのが良いですか?これは使用シナリオに依存しますか (たとえば、プロパティが宣言されているオブジェクトに複数の初期化子があるか、プロパティの型、使用方法など)?

ゲッターをオーバーライドする本当の利点は、プロパティが必要なときにのみ割り当てられることですが、最初のアクセスが遅くなるという欠点があります。

init余談ですが、メソッド内のプロパティにアクセスする場合、または としてアクセスする方がよいでしょうself.object_object?

4

2 に答える 2

2

個人的には、init メソッドでの初期化の方が優れていることがわかりました。オブジェクトの寿命はより明確になり、オブジェクトの init が失敗したかどうかも考慮します。

self.objectオブジェクトのゲッターとセッターと「自己」を使用するため、プロパティにも使用することを好みます。保持が必要かどうかを明確にし、状況を回避します。あなたの例のように、場合によってはさらに数行のコードが発生する可能性がありますが、コードを最適化するためにコンパイラに依存しています。

例えば

yourobjclass* tmp = [[yourobjclass alloc] init];
self.object = tmp;
[tmp release];
于 2012-05-26T04:57:22.757 に答える