ios - UIViewController 未释放
<p><p>我遇到这个问题已经有一段时间了,并尝试了几种方法来避免它,但现在我决定一劳永逸地解决它:)</p>
<p>我有一个聊天 ViewController ,它使用 KVO 观察 NSSet,ChatVC 有一个 UITableView,并且每次将新的 ChatMessage 插入到 NSSet 时,它也会作为 UITableViewCell 添加到 tableview。</p>
<p>现在,我的问题不在于观察,我猜它与内存管理有关。
在我的 ChatVC 中,方法 dealloc 永远不会被调用,因此 vc 始终在后台观察该 NSSet 对象。</p>
<p>我已尝试在 viewWillDisappear 上手动删除观察者,但 ChatVC 仍在后台。</p>
<p>使用 Instruments 对其进行分析向我表明,它实际上来自导致 ChatVC 的 pushViewController:</p>
<pre><code>MZChatViewController* chatViewController = [ initWithNibName:@"MZChatViewController" bundle:nil];
chatViewController.shouldShowIndetermineConnectingIndicator = showIndicator;
// instruments shows 100% on this row
;
chatViewController = nil;
</code></pre>
<p>在这里稍作搜索,谷歌实际上没有给我任何帮助,我已经通过了我在那个 VC 中的所有代码,并且真的努力寻找一个保留循环,它也可能导致这个没有释放问题,但什么也没找到。</p>
<p><b>PS。
Xcode 5、iOS 7 SDK、ARC</b></p>
<p><em><strong>已解决:</strong></em>
显然它与 pushViewController:animated: 方法无关,Instruments 只是将此点标记为保留循环的原因,因为它正在触发一个在 viewDidLoad 处运行的 NSTimer。
因此,在 viewWillDisappear 中使该计时器无效解决了它。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>虽然这不是这里的问题,但也许这会帮助遇到类似问题的其他人解除分配 UIViewControllers。</p>
<p>我们的 UIViewController 没有被释放,因为自定义委托(delegate)属性持有强引用。</p></p>
<p style="font-size: 20px;">关于ios - UIViewController 未释放,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/21501736/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/21501736/
</a>
</p>
页:
[1]