1. ホーム
  2. オブジェクティブC

[解決済み】Objective-Cで宣言された@property属性(非原子、コピー、strong、weak)。

2022-04-15 15:19:57

質問

各属性をどのような場合に使用するのか、どなたか詳しく教えてください。 nonatomic , copy , strong , weak といったように、宣言されたプロパティに対して、それぞれが何をするのか説明してください。また、何らかの例もあれば最高です。私はARCを使用しています。

どのように解決するのですか?

非原子

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の同義語にすぎません。

について学ぶには良いサイトです。 strongweak をiOS 5に対応させました。 http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

<強い 弱い

weakstrong そのオブジェクトのオーナーになるわけではなく、単にそのオブジェクトへの参照を保持するだけです。オブジェクトの参照カウントが 0 になると、たとえここでまだそのオブジェクトを指していたとしても、メモリから解放されることになります。

上記リンク先には 弱いものと強いもの