- プロパティをARC ありまたは ARC なしの両方の側面
nil
で設定することの意味は何ですか?viewDidUnload
- の場合にのみ重要
IBOulets
ですか?他のプロパティ ( ではないIBOulets
) をに設定する必要はありませんnil
か? - 私がそれをしなければ、どのような結果になる可能性がありますか? 私は
nil
以前にそれらを設定したことがなく、結果を観察していません。
助けていただければ幸いです。
nil
で設定することの意味は何ですか?viewDidUnload
IBOulets
ですか?他のプロパティ ( ではないIBOulets
) をに設定する必要はありませんnil
か?nil
以前にそれらを設定したことがなく、結果を観察していません。助けていただければ幸いです。
viewDidUnload で IBOutlets を nil に設定すると、メモリ警告でアウトレットを解放するようにコンパイラに指示します。これは、メモリ警告で ..viewDidUnload と viewcontrollers の didReceiveMemoryWarning が呼び出されるためです。通常、ViewDidUnload で IBOutlets は nil に設定され、didReceiveMemoryWarning プロパティまたはオブジェクトは解放されます.したがって、このような場合、メモリが回復されるため、アプリは機能し続けることができます。それ以外の場合、継続的なプーリングにより、メモリ不足によるクラッシュが発生します。
ウェブ上でたくさんの記事を読み、stackoverflow.comで同様の質問をした後、私は次のことを理解しました。
viewDidUnload
メモリ不足の状況でコンパイラによって呼び出されます。
メソッドでこれらのプロパティをnilに設定する必要があります。これは、で再インスタンス化されviewDidLoad
ます。ほとんどすべてのIBOutletコンポーネントがこのカテゴリに分類されます。したがって、メソッドでIBOutletsをnilに宣言する方が適切です。そうしないと、継続的なプーリングが発生し、将来的にメモリが不足するためにクラッシュが発生する可能性があります(その間、アプリは実行を継続します)。
また、NSString(クラッシュを引き起こす可能性があります)のようなクラスのインスタンスをゼロにするべきではないことも読みました。これは私の経験によると正しいです。しかし、その理由はわかりません。
私はそれについてもっと何かを知るようになるたびにこの答えを更新し続けます。
ありがとう。