いつ私は.hファイルで宣言され、my.mファイルviewdidloadに割り当てられたオブジェクトを解放する必要がありますか? Autoreleaseは私にエラーを与えます。iOS:メンバーオブジェクトを解放するのはいつですか?
-(void)dealloc{
}
メソッド(プロパティなど)でそれらを解放する必要がありますか?
Thxを
いつ私は.hファイルで宣言され、my.mファイルviewdidloadに割り当てられたオブジェクトを解放する必要がありますか? Autoreleaseは私にエラーを与えます。iOS:メンバーオブジェクトを解放するのはいつですか?
-(void)dealloc{
}
メソッド(プロパティなど)でそれらを解放する必要がありますか?
Thxを
まず、[スーパーのdealloc]を追加し、それは重要です:
-(void)dealloc{
[var1 release], var1 = nil;
[var2 release], var2 = nil;
[super dealloc];
}
第二に、はい、あなたが保持しているインスタンス変数を手動で解放する必要があります。
は[super dealloc]です。常にdeallocメソッドの最後の文?それはしばしば最初のものとして見た.. – user944351
決して決して、あなたのdeallocメソッドの途中に入れないでください。あなたのサブクラス変数はスーパークラス変数に大きく依存しているかもしれないので、サブクラスは安全性の問題のために最初に解放されなければなりません。シンプルなサブクラス化で、最初の[super dealloc]は機能しますが、メソッドの最後に書くのに慣れておくことをお勧めします - コードを簡単に拡張可能にし、よりプロフェッショナルに見せてください。また、[super dealloc]を省略すると、アプリケーションはクラッシュせずにメモリリークを引き起こします。 –
ありがとうございました! – user944351
あなたはARC(Xcodeの最新バージョンではデフォルト)を使用している場合は、そのリリースが自動的に挿入されている/保持し、あなただけのあなたがする必要がある場合の参照を維持する(オブジェクトグラフを心配する必要はありオブジェクトを使用し、循環参照を避ける)。
そうでない場合は、dealloc
がメンバー変数を解放する正しい場所であることが間違いありません。 viewDidLoad
で作成されたものの場合は特にそうですが、コントローラの寿命の間、ビューが複数回ロード/アンロードされる可能性があるので、viewDidUnload
を使用してこれらのオブジェクトを解放することを検討してください。
ARC(自動参照カウント)を使用している場合は、そうではありません。それはあなたのために自動的に行われます。 ARCを使用していない場合は、通常のようにdeallocで手動で行います。 release
、retain
、またはautorelease
とオブジェクトにしようとすると、新しいプロジェクトでARCが自動的に使用され、ARCによってエラーが表示されることに注意してください。
いいえ、私はこれをサポートしていない外部ライブラリのためにarcを使用していません。 – user944351
はい、一般的にはdealloc
でリリースします。しかし、それらがviewDidLoad
で作成されている場合は、特に、viewDidLoad
が呼び出されたときにオブジェクトを現在の状態で再作成することができる場合は、viewDidUnload
にそれらを解放(ivarをnil
に設定)したいことがあります。
もちろんARCを使用している場合は、dealloc
にイールズを明示的にリリースする必要はありません。これはARCがdealloc
の実装を生成するためです。
私はいつもオブジェクトを解放してnilする必要がありますか? – user944351
'viewDidUnload'では、確かにyesです。 'dealloc'では、それは依存します。それはそれらを「拒否」することはありませんが、あなたはそれについてもっと多くの質問を読むことができます:-)。 – mattjgalloway
メモリ管理とメモリリークに関する深刻な問題を回避したい場合は、オブジェクトの割り当てに関する疑問を明確にして解放する必要があります。このリンクを試してくださいhttp://iosdevelopertips.com/objective-c/memory-management.html
私はあなたがそのObjのためのメモリを割り当てていません。 –
alloc、mutableCopy、new、copyを使用している場合はメモリを割り当てます。あなたは解放する。 –