[英]Deinit Called But Object Still in Memory
经过几个小时的搜索,我终于设法(大部分)弄明白了。
在这种情况下,我有一个类A,它有6个属性,其中一个是类B的实例。类A用类B注册块回调。类B接收来自主运行循环外部的事件,在一个单独的NSThread上没有正确包装在@autoreleasepool中。 结果,B类保留的时间比预期的长,这导致其对A的回调被保留的时间长于预期。
我之所以说“大部分时间”都认为这是因为A级用[unowned self]
注册了所有这些块。 由于一个仍然未知的原因,这似乎足以让deinit被执行,但还不足以实际释放该对象。 在@autoreleasepool中包装其他线程允许应用程序释放B,这足以释放A.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.