私は現在、客観C.ルビー|| =同等
にはるかに簡単に後半のようルビーを学習し、それは怠惰なゲッターを書いなるだろうと|| =機能と恋に基本的に午前してきましたイムは、||と何かが欠けていない限り
- (NSArray *)myArray {
if (!_myArray) {
_myArray = [NSArray array];
}
return _myArray
}
は=私が使ってRubyで前のコードを記述することができるだろう:
- (NSArray *)myArray {
return _myArray ||= [NSArray array];
}
ザッツ明らかに非常にクリーン私は、次のようなゲッターを書きます。 Objective-C言語/ランタイムにこれを行うための何かがありますか?
また、以下はgetterの1行の3進数です。上に掲載された試行錯誤したメソッド(最初のスニペット)と同じ効果があるかどうかはわかりません。やって何も悪いことをtheresの場合、誰かが私を伝えることができます:
- (NSArray *)myArray {
return _myArray = _myArray ? _myArray : [NSArray array];
}
Objective Cは分かりませんが、クラスのコンストラクタや初期化メソッドで '_myArray = [NSArray array];'再び、Objective C:p – David
を知らない人による潜在的な提案スレッド安全性を気にするなら、上記のすべてが間違っていることに注意してください。 –
マルチスレッド化では、スレッドAがセッターを呼び出し、非nilテストに失敗し、スレッドBがプリエンプトする可能性があります。スレッドBもセッターを呼び出し、非nilテストに失敗します。両方のスレッドは、新しいNSArrayを作成し、それを '_myArray'に格納することを決めました。喜びが続く。 –