UIViewController
子の1つを削除するときに次のことを行うコンテナがあります:
- (void)removeChildWithIndex:(NSUInteger)Index {
@autoreleasepool {
ChildViewController *child = [_children objectAtIndex:Index];
//Remove the child from the VC hierarchy
[child willMoveToParentViewController:nil];
[child.view removeFromSuperview];
[child removeFromParentViewController];
//Remove the child from array
[_children removeObjectAtIndex:Index];
}
//Post a notification for anyone who might care
[[NSNotificationCenter defaultCenter] postNotificationName:RemovedChildNotification object:self];
}
私の問題の根本は、ブロックの最後に ed されてchild
いないことですが、代わりに少し後で解放されます (RunLoop が未解決のイベントの内部リストを処理する機会を持った後の外観による):dealloc
@autoreleasepool
これは通常は問題にはなりませんが、上記の関数の最後で送信されたことを監視している 1 つのオブジェクトは、通知を受信する前に ed に依存NSNotification
しています。child
dealloc
child
すぐにリリースされない理由を理解するのに役立つドキュメントを説明/リンクしてもらえますか?
または、いつ編集するかについて選択の余地がない場合、誰かchild
がdealloc
私の通知を後まで遅らせるクリーンな方法を提案できdealloc
ますか? 親にその終焉を知らせるために電話をかけ、[ChildViewController dealloc]
その時点で通知を発射することができると思いますが、それはかなり汚い方法です...