Interface Builderを使用してGUI要素をViewControllerのIBOutletに接続しましたが、viewDidUnloadまたはdeallocでいつリリースする必要があるのかわかりませんか?または両方?
ありがとう!
nil
それらがプロパティであると仮定すると、viewDidUnloadとdeallocの両方でそれらを設定する必要があり、必ずセッターを使用してください。だから例えば
self.imageView = nil;
self.segmentControl = nil;
/* etc */
保持プロパティをnilに設定すると、オブジェクトが解放され、インスタンス変数がnilに設定されます(したがって、間に新しいオブジェクトを取得しなくても、同じことを再度実行しても安全です)。
viewDidUnload
ビューコントローラのビューがメモリから排出されたときに呼び出されます。これは、メモリ警告が発生し、ビューコントローラが現在そのビューを使用していない場合に発生する可能性があります。自分用にいくつかのサブビューを保持し(暗黙的に、「保持」セッターを介して、または意図的に)、それらを解放しない場合、それらはメモリに残ります。メモリ警告を受け取ったときにできるだけ多くのメモリを解放する必要があり、システム全体で十分なメモリが解放されないと、あなたや他のプロセスが終了する可能性があるため、彼らにそうさせたくありません。したがって、ユーザーに親切であり、良き市民であることが重要です。
プロパティを保持するか割り当てるかにかかわらず、同じアドバイスが適用されます。それらが保持されている場合は、プロパティをnilに設定すると解放され、割り当てられたばかりの場合は、プロパティをnilに設定すると、ダングリングポインタを保持できなくなります。
IBOutletsをdeallocでリリースする必要があります。
viewDidUnloadでは、viewDidLoadで作成または保持したものをすべて解放する必要があります。