intをプロパティ化/合成するにはさまざまな方法がありますが、適切な方法はわかりません。intのセッター/ゲッターの正しい属性は何ですか?
@property (nonatomic, assign) int myInt
しかし、私は、人々が使用見てきました:
私は通常行う
@property (nonatomic) int myInt
@property int myInt
どっちが正しいのですか?
intをプロパティ化/合成するにはさまざまな方法がありますが、適切な方法はわかりません。intのセッター/ゲッターの正しい属性は何ですか?
@property (nonatomic, assign) int myInt
しかし、私は、人々が使用見てきました:
私は通常行う
@property (nonatomic) int myInt
@property int myInt
どっちが正しいのですか?
割り当て、アトミックですa great post about the difference between atomic
and nonatomic
です:
原子 対非アトミック変更、あなたがメソッドの実装を@synthesizingしていることを、生成されたコードを仮定。あなた自身の セッター/ゲッターを書く場合、原子/非原子/保持/割り当て/コピーは単に 勧告です。
原子と、合成セッター/ゲッター全体 値は常に他のスレッドに関係なく、セッター活性のゲッターから返さまたはセッターにより設定、 されることを保証します。自動解放オブジェクト、最も可能性が高い - - スレッドBはセッターを呼び出しながら、スレッド Aはゲッターの真ん中にある場合には 実際の実行可能な値は、ある はA.で呼び出し元に返される
非原子的では、そのような保証は行われません。したがって、原子以外のものは原子よりもかなり速い です。
スレッドが安全であることを保証するものではありません。 スレッドAがスレッドBと同時にゲッターを呼び出していて、異なる値のセッターを呼び出すC の場合、スレッドAは のいずれかの値を返します。つまり、セッターの前の値は です。同様に、 オブジェクトはBまたはCからの値で終わる可能性があります。
マルチスレッドプログラミングの主な課題の1つであるデータの完全性の保証は、他の手段で達成されます。
@property (nonatomic, assign) int myInt @property (nonatomic) int myInt
そして、同様に:最後の例は、別のデフォルト値は、したがって、これら二つのオプションは等価です、
assign
ある@property (atomic) int myInt
と同等であるように、デフォルトで、
atomic
であること
注意以下も同様です。
@property (atomic, assign) int myInt
@property (atomic) int myInt
編集:ジョシュが指摘しているように、atomic
が含まれているのは仮説的な例です。
デフォルトはここで
技術的な正しさの問題よりもスタイルの問題です。int型の場合、にはがあり、assign
修飾子はtrue(スカラーを保持していないため)です。それ以外の場合は、コンテキスト固有のものです:readwriteまたはreadonly、atomicまたはnonatomic、それはアプリケーションによって異なります。
修飾子を指定しないと、デフォルトが適用されます(atomic、readwrite、assign)。したがって、あなたの最初の他の例は同じで、3番目の例は原子性が異なります。
@property(非構造体、代入)int myVariable;
常に割り当てる覚えはブール
、int型などのプリミティブデータ型のために使用されますあなたは 'atomic'が実際の特性のためのキーワードとして存在していないので、最初と最後の2つの例は、架空のあることは言うかもしれません。 –