[解決済み] [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" が必要です。オブジェクトの値を現時点のまま必要とし、その値がオブジェクトの他の所有者による変更を反映しないようにしたい場合に使用します。コピーを保持しているため、そのオブジェクトを使い終わったら解放する必要があります。
関連
-
[解決済み] 「シミュレータで実行すると、「インストールされているプロビジョニングプロファイルが、インストールされているiOS署名アイデンティティと一致しません。
-
[解決済み] <UITabBarController: 0x197870> の外観遷移の開始/終了の呼び出しがアンバランスである。
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] 配列型 'int [16]' は代入不可能です。
-
[解決済み] Objective-Cの定数
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
-
[解決済み] Objective-Cのデリゲートには通常、retainではなくassignというプロパティが与えられるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み] Xcode コマンド /usr/bin/codesign は終了コード 1 で失敗しました : errSecInternalComponent
-
[解決済み] 基本的なUIButtonをプログラムで作成するには?
-
[解決済み] データソースからのセルの取得に失敗しました。
-
[解決済み] ブリッジングヘッダ用のプリコンパイルヘッダの発行に失敗しました。
-
[解決済み] ERROR ITMS-9000: "Redundant Binary Upload. 列車 '1.0' のビルドバージョン '1.0' のバイナリアップロードが既に存在します" と表示されました。
-
[解決済み] iOS HTTP GET リクエストを実行できません -Error Domain=NSURLErrorDomain Code=-1012
-
[解決済み] なぜibtoolはexit code 255で失敗したのでしょうか?
-
[解決済み] Xcode 6: iOS 8.1 The Developer Disk Imageをマウントできませんでした。
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?