2011-07-14 5 views
3

intをプロパティ化/合成するにはさまざまな方法がありますが、適切な方法はわかりません。intのセッター/ゲッターの正しい属性は何ですか?

@property (nonatomic, assign) int myInt 

しかし、私は、人々が使用見てきました:

私は通常行う

@property (nonatomic) int myInt 
@property int myInt 

どっちが正しいのですか?

答えて

3

割り当て、アトミックです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が含まれているのは仮説的な例です。

+2

、int型などのプリミティブデータ型のために使用されますあなたは 'atomic'が実際の特性のためのキーワードとして存在していないので、最初と最後の2つの例は、架空のあることは言うかもしれません。 –

0

デフォルトはここで

0

技術的な正しさの問題よりもスタイルの問題です。int型の場合、にはがあり、assign修飾子はtrue(スカラーを保持していないため)です。それ以外の場合は、コンテキスト固有のものです:readwriteまたはreadonly、atomicまたはnonatomic、それはアプリケーションによって異なります。

修飾子を指定しないと、デフォルトが適用されます(atomic、readwrite、assign)。したがって、あなたの最初の他の例は同じで、3番目の例は原子性が異なります。

0

@property(非構造体、代入)int myVariable;

常に割り当てる覚えはブール

関連する問題