我有这个问题已经有一段时间了,并尝试了几种方法来避免它,但现在我决定一劳永逸地解决它:)
我有一个聊天视图控制器,它使用KVO观察NSSet,ChatVC有一个UITableView,每次将新的ChatMessage插入NSSet时,它也被添加为UITableViewCell到tableview。
现在,我的问题不在于观察,我猜它与内存管理有某种关系。 在我的ChatVC中,方法dealloc永远不会被调用,以便vc始终在后台观察NSSet对象。
我尝试在viewWillDisappear上手动删除观察者,但ChatVC仍然在后台。
使用Instruments进行分析表明,实际上它来自pushViewController导致ChatVC:
MZChatViewController* chatViewController = [[MZChatViewController alloc] initWithNibName:@"MZChatViewController" bundle:nil];
chatViewController.shouldShowIndetermineConnectingIndicator = showIndicator;
// instruments shows 100% on this row
[self.navigationController pushViewController:chatViewController animated:animated];
chatViewController = nil;
在这里进行一点搜索,google实际上没有给我任何帮助,我已经通过了我在VC中的所有代码,并且确实努力找到一个保留的循环,这也可能导致这个没有解除分配问题而且什么都没找到。
PS。 Xcode 5,iOS 7 SDK,ARC
的解决: 的 显然它与pushViewController没有任何关系:animated:方法,Instruments只是将这个位置标记为保留周期的原因,因为它正在触发一个在viewDidLoad上运行的NSTimer。 因此,在viewWillDisappear中使该计时器失效解决了它。
答案 0 :(得分:0)
虽然这不是问题所在,但这可能会帮助遇到类似问题的其他人解除分配UIViewControllers。
我们的UIViewController未被释放,因为自定义委托属性拥有强大的引用。