我在查找未发布View Controller的原因时遇到了一些麻烦。它只出现在层次结构的顶部,因为它是一个子页面,其唯一目的是与应用程序的其他用户聊天(次要功能)。
我已经尝试过使用乐器了,我能找到的唯一信息是保留的原因是UIKit的一个数 - UIClassSwapper对我来说没什么意义。
我在控制器中使用以下内容:
未使用自定义委托,并且在此控制器中使用对self的显式强引用。聊天气泡具有自定义绘图代码,可添加图层但不需要任何其他视图的引用。
可能导致视图控制器被保留的原因是什么?
这很重要,因为保留的每个视图控制器都会使套接字响应服务器发送的事件。一段时间后让每个用户都计为多个。
请注意,如果代码的任何特定部分有更高的机会导致此问题,我会将其添加到我的问题中。整个视图控制器有超过400行代码,在我的问题中完全没有它是不切实际的。
修改
我采取了inokey的建议并将每个部分分解为调试,保留周期的原因实际上是Socket IO。我还重读了Socket IO的文档,发现有一个removeAllHandlers()
方法将删除可能导致强引用周期的所有引用。
最后,我没有仔细阅读文档--.-
答案 0 :(得分:1)
当使用很多外部资源(如Socket Client或Realm Client)时,这些人有很多机会可以获得强大的参考资料。我想如果问题是导致保留周期的原因,你可以尝试一些方法。
首先。尝试逐个删除任何不应该属于原始MVC模式中的VC的内容。那显然是socket和领域。理想情况下,它们应该封装在某种服务中并由服务使用。不是由VC直接。
二。检查这些对象是否在您建议的时候被取消初始化。您可以通过向其添加deinit()
方法来实现。
第三。以上两者都是:尝试回答问题,你如何初始化这些东西?
对不起,我不能更具体,但我希望这会引导你做出正确的想法。
答案 1 :(得分:0)
您可以使用MLeaksFinder帮助找出导致回收的原因。