UIViewController未取消分配

问题描述 投票:1回答:1

我有一段时间没有这个问题,并尝试了几种方法来避免它,但现在我决定一劳永逸地修复它:)

我有一个聊天视图控制器,它使用KVO观察NSSet,ChatVC有一个UITableView,每次将一个新的ChatMessage插入NSSet时,它也被添加为一个UITableViewCell到tableview。

现在,我的问题不在于观察,我猜它与内存管理有某种关系。在我的ChatVC中,方法dealloc永远不会被调用,以便vc始终在后台观察NSSet对象。

我试过手动删除viewWillDisappear上的观察者,但ChatVC仍然在后台。

使用Instruments对其进行分析表明,实际上它来自于导致ChatVC的pushViewController:

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;

在这里进行一点搜索并且谷歌给了我实际上没有任何帮助,我已经通过了我在VC中的所有代码并且真的努力找到一个保留的循环,这也可以导致这个没有解除分配问题而一无所获。

PS。 Xcode 5,iOS 7 SDK,ARC

解决:显然它与pushViewController没有任何关系:animated:方法,Instruments只是将这个位置标记为保留周期的原因,因为它正在触发一个在viewDidLoad上运行的NSTimer。因此,在viewWillDisappear中使该计时器无效解决了它。

ios objective-c automatic-ref-counting
1个回答
0
投票

虽然这不是问题所在,但这可能会帮助遇到类似问题的其他人解除分配UIViewControllers。

我们的UIViewController没有被释放,因为自定义委托属性拥有强大的引用。

© www.soinside.com 2019 - 2024. All rights reserved.