nonatomic
宣言されたプロパティに対して、、、、などcopy
の各属性をいつ使用しなければならないのか、また、それぞれの機能について詳しく説明してもらえますか? 何らかの例があると助かります。私は ARC を使用しています。strong
weak
ベストアンサー1
非原子
Nonatomic
アクセサを介してスレッドセーフなルーチンを生成しません@synthesize
。atomic
スレッドセーフなアクセサを生成するので、atomic
変数はスレッドセーフになります(データの破損なしに複数のスレッドからアクセスできます)。
コピー
copy
オブジェクトが変更可能な場合は必須です。オブジェクトの値を現時点でそのまま必要とし、その値にオブジェクトの他の所有者による変更を反映させたくない場合に使用します。コピーを保持しているため、使用が終わったらオブジェクトを解放する必要があります。
割当
Assign
は と多少逆ですcopy
。プロパティのゲッターを呼び出すとassign
、実際のデータへの参照が返されます。通常、この属性はプリミティブ型 (float、int、BOOL...) のプロパティがある場合に使用します。
保持
retain
属性がヒープ上に割り当てられた参照カウント オブジェクトへのポインターである場合に必要です。割り当ては次のようになります。
NSObject* obj = [[NSObject alloc] init]; // ref counted var
によって生成されたセッターは、@synthesize
オブジェクトがコピーされるときに参照カウントをオブジェクトに追加します。これにより、元のコピーがスコープ外になった場合でも、基になるオブジェクトは自動的に破棄されません。
使用が終わったらオブジェクトを解放する必要があります。@property
を使用するとretain
参照カウントが増加し、自動解放プールのメモリが占有されます。
強い
strong
は、Objective-C の自動参照カウント (ARC) の一部である、retain 属性の代わりです。ARC 以外のコードでは、retain の同義語としてのみ機能します。
strong
これは、weak
iOS 5 について学ぶのに適した Web サイトです。http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1
弱い
weak
は、参照カウントを 1 増やさないことを除いてと似ています。strong
そのオブジェクトの所有者にはなりませんが、そのオブジェクトへの参照を保持するだけです。オブジェクトの参照カウントが 0 に下がると、ここでまだオブジェクトを指している場合でも、メモリから割り当て解除されます。
上記のリンクには、弱点と強点に関する有益な情報が含まれています。