菜鸟教程小白 发表于 2022-12-12 18:26:27

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:@&#34;MZChatViewController&#34; 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]
查看完整版本: ios - UIViewController 未释放