Objective-C で宣言された @property 属性 (nonatomic、copy、strong、weak) 質問する

Objective-C で宣言された @property 属性 (nonatomic、copy、strong、weak) 質問する

nonatomic宣言されたプロパティに対して、、、、などcopyの各属性をいつ使用しなければならないのか、また、それぞれの機能について詳しく説明してもらえますか? 何らかの例があると助かります。私は ARC を使用しています。strongweak

ベストアンサー1

非原子

Nonatomicアクセサを介してスレッドセーフなルーチンを生成しませ@synthesizeatomicスレッドセーフなアクセサを生成するので、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これは、weakiOS 5 について学ぶのに適した Web サイトです。http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

弱い

weakは、参照カウントを 1 増やさないことを除いてと似ています。strongそのオブジェクトの所有者にはなりませんが、そのオブジェクトへの参照を保持するだけです。オブジェクトの参照カウントが 0 に下がると、ここでまだオブジェクトを指している場合でも、メモリから割り当て解除されます。

上記のリンクには、弱点と強点に関する有益な情報が含まれています。

おすすめ記事