我有一个容器UIViewController
,它在删除它的一个孩子时执行以下操作:
- (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];
}
我的问题的根源是它child
没有dealloc
在块的末尾被编辑@autoreleasepool
,而是稍后发布(在 RunLoop 有机会处理未完成事件的内部列表之后看起来):
这通常不会成为问题,但是NSNotification
在上述函数结束时观察发送的一个对象依赖于在收到通知之前child
被ed。dealloc
任何人都可以向我解释/链接到一些文档以帮助我理解为什么child
不立即发布吗?
child
或者,如果我对何时发布别无选择dealloc
,任何人都可以建议一种干净的方式将我的通知延迟到发布时间之后dealloc
?我想我可以打电话[ChildViewController dealloc]
通知父母它的死亡并在那时发出通知,但这是一种非常肮脏的方式......