[解決済み] ARCを使用する場合、deallocでプロパティをnilに設定するのですか?
質問
私はiOS 5のAutomatic Reference Countingを学ぼうとしています。さて、この質問の最初の部分は簡単なはずです。
-
を行うことは正しいのでしょうか? ではない を明示的に書く必要があるということですか? を書く必要はないのでしょうか?つまり というのは本当でしょうか? ではない は明示的な deallocは必要ないのでしょうか?
@interface MyClass : NSObject @property (strong, nonatomic) NSObject* myProperty; @end @implementation MyClass @synthesize myProperty; @end
-
次の、より重要な質問は ARC リリース ノートへの移行 という文書にあります。
<ブロッククオートインスタンス変数を解放する必要はありません(実際できません)。しかし、システムクラスやARCを使ってコンパイルされていない他のコードでは、[self setDelegate:nil]を呼び出す必要があるかもしれません。
どのシステムクラスがARCでコンパイルされていないのか、どうすればわかるのでしょうか?いつ私自身の dealloc を作成し、強く保持するプロパティを明示的に nil に設定すべきでしょうか? プロパティで使用されるすべての NS および UI フレームワーク クラスは明示的な dealloc を必要とすると仮定すべきでしょうか?
手動参照追跡を使用するときにプロパティのバッキング IVar を解放するプラクティスについて、SO や他の場所で豊富な情報がありますが、ARC を使用するときにこれについては比較的少ないです。
どのように解決するのですか?
短い答え
: いいえ。
dealloc
のプロパティを無効にする必要はありません。
長い回答
: でのプロパティは決してnil outしてはいけません。
dealloc
にあるプロパティは、たとえ手動でのメモリ管理であっても、決してnil outしてはいけません。
MRRでは
アイバー
. プロパティを解放するということは、セッターを呼び出すということであり、セッターは
dealloc
で触れるべきでないコードを呼び出すかもしれません (例えば、あなたのクラスやサブクラスがセッターをオーバーライドしている場合など)。同様に、KVOの通知も引き起こすかもしれません。代わりに ivar を解放することで、これらの望ましくない動作を回避することができます。
ARCでは、システムは自動的にあなたのためにivarを解放するので、もしあなたがしていることがすべてなら、あなたは
dealloc
. しかし、特別な処理が必要なオブジェクトでない四角形がある場合 (例えば、割り当てられたバッファで
free()
に必要な割り当てられたバッファなど) がある場合は、それらの扱いは
dealloc
.
さらに、もしあなたが自分自身を何らかのオブジェクトのデリゲートとして設定しているのであれば、その関係を
dealloc
(を呼び出すことです。
[obj setDelegate:nil]
). ARCでコンパイルされていないクラスでこれを行うことについての注意は、弱いプロパティに対するうなづきのようなものです。もしクラスが明示的に
delegate
プロパティを
weak
というプロパティを指定した場合は、weakプロパティの性質上、このような処理を行う必要はありません。しかし、もしそのプロパティが
assign
と書かれている場合は
dealloc
そうしないと、クラスはポインタがぶら下がったままとなり、デリゲートにメッセージを送ろうとすると、おそらくクラッシュします。これはデリゲートのような非保持関係にのみ適用されることに注意してください。
関連
-
[解決済み] Objective-Cのクラス→文字列のようなものです。[NSArray className] -> @"NSArray" のようになります。
-
[解決済み] error: Writeable atomic property cannot pair with synthesized setter/getter and the user defined setter/getter.
-
[解決済み] Xcodeはクラッシュの原因となる行を表示しない
-
[解決済み] 複数のサブクラスで1つのストーリーボードuiviewcontrollerを使用する方法
-
[解決済み] Objective-Cのセレクタ?
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】UIBarButtonItemの表示/非表示を切り替えるにはどうしたらいいですか?
-
[解決済み] 現在の日付から7日分を差し引いた日数
-
[解決済み] Objective-Cのクラス→文字列のようなものです。[NSArray className] -> @"NSArray" のようになります。
-
[解決済み] Objective-CのクラスでSwiftのプロトコルをインポートする
-
[解決済み] iOSの合成されたプロパティの名前を、先頭のアンダースコアで変更するのはなぜですか?重複
-
[解決済み] Objective-CでNSArrayを新しいNSArrayにフィルタリングする。
-
[解決済み] Objective-Cでコールバックを実行する方法
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] メソッドが存在するかどうかをチェックする