ARCでオブジェクトを破棄する正しい方法は何ですか?
UIViewController
実行時の特定の時間に、いくつかのsとAUGraphを保持しているオブジェクトを破棄したいと思います。
現時点では、親のviewcontrollerがviewcontrollerオブジェクトを作成し、それらのビューをそのオブジェクトに割り当てるとview
、オブジェクトは明らかに親と一緒に存続します。これらの子ViewControllerは、不要になった瞬間に破棄したいと思います。
ARCでオブジェクトを破棄する正しい方法は何ですか?
UIViewController
実行時の特定の時間に、いくつかのsとAUGraphを保持しているオブジェクトを破棄したいと思います。
現時点では、親のviewcontrollerがviewcontrollerオブジェクトを作成し、それらのビューをそのオブジェクトに割り当てるとview
、オブジェクトは明らかに親と一緒に存続します。これらの子ViewControllerは、不要になった瞬間に破棄したいと思います。
それらのオブジェクトを参照する変数をに設定するだけですnil
。その後、コンパイラはその時点でオブジェクトを解放し、オブジェクトへの強力な参照が他に存在しない場合、オブジェクトは破棄されます。
オブジェクトを参照する変数を[release]
に設定すると、ARC は への呼び出しを挿入します。__strong
nil
@interface MyViewController : UIViewController {
UIViewController *childViewController;
}
...
@end
-(void)destroyChild {
childViewController = nil;
}
オブジェクトの C スタイルの配列がある場合も同じことが行われます。配列の要素を設定して、/nil
でない限り、そこにあったアイテムを解放します。子ビュー コントローラーを に保持する場合、配列からオブジェクトを削除すると、その参照カウントが減少します。__weak
__unsafe_unretained
NSMutableArray
通常、これはオブジェクトを nil に設定することで実現できます。舞台裏で起こっていることは、オブジェクトが ARC によって解放され、その後 nil に設定されることです。これにより、目的が達成されるはずです。