1. ホーム
  2. アイオス

[解決済み] [Objective-Cの@propertyのretain, assign, copy, nonatomicについて。

2022-04-18 15:25:17

質問

Objective-Cの初心者ですが、@propertyディレクティブに続くretain、assign、copy、その他私が見逃しているものについて、どなたか概要を教えていただけませんか?これらは何をするもので、なぜ他のものより1つを使いたいと思うのでしょうか?

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

MrMageさんのリンク先の記事が使えなくなりました。そこで、私が(非常に)短期間にObjective-Cでコーディングした中で学んだことを紹介します。

非アトミックとアトミック - atomic"はデフォルトです。常に "nonatomic"を使用してください。理由はわかりませんが、私が読んだ本には、"atomic"を使う理由はほとんどない、と書いてありました。(ちなみに私が読んだ本はBNR "iOS Programming"という本です)。

readwrite vs. readonly - "readwrite"がデフォルトです。synthesizeすると、ゲッターとセッターの両方が作成されます。readonly"を使用すると、セッターは作成されません。オブジェクトのインスタンス化後に絶対に変更したくない値に対して使用します。

保持とコピーと代入

  • assign"はデフォルトです。synthesize で作成されるセッターでは、値が単に属性に割り当てられます。私の理解では、"assign" はポインタでない属性に使うべきものだと思うのですが。
  • "retain"は、属性がオブジェクトへのポインタの場合に必要です。synthesizeによって生成されたセッターは、オブジェクトを保持します(別名、保持カウントを追加します)。そのオブジェクトを使い終わったら解放する必要があります。
  • オブジェクトが変更可能な場合、"copy" が必要です。オブジェクトの値を現時点のまま必要とし、その値がオブジェクトの他の所有者による変更を反映しないようにしたい場合に使用します。コピーを保持しているため、そのオブジェクトを使い終わったら解放する必要があります。