比如说,我有一个 UIView
类型的类(比如“MyClass”),我在其中声明了一个 (nonatomic, strong)
类型的属性用于类委托(delegate),处理事件将由类触发。
应用程序启用了 ARC,它工作得很好,有一次我发现了一些有趣的东西,我在我的一个 View Controller (比如 TempViewController)中放置了一个 dealloc,我在其中设置 MyClass
的委托(delegate)到 self
。每当我从 TempViewController 弹出时,它应该调用它的 dealloc 方法,但事实并非如此。我不知道为什么,但事实并非如此,我为其他类放置了 deallocs,它们都被调用了。
然后我发现,它没有在 TempViewController 中调用,因为我已经设置了 MyClass 委托(delegate)。我也对其他类进行了相同的测试,然后它停止调用 dealloc。
后来我更改,将属性委托(delegate)给 assign
而不是 strong
,尽管它再次工作正常。
我发现的另一个解决方案是,通过在 viewDidDisappear
中为 MyClass 的委托(delegate)设置 nil
(就像我们为 MKMapView
或 UIWebView
),它将为同一个 TempViewController 类调用 dealloc。
是什么导致了这个问题?有什么帮助,建议吗?
最佳答案
这也意味着您仍然持有或引用另一个类的属性,并且编译器无法调用该类的 dealloc 方法。如果你完成了,你要么将它设置为 nil,要么为它分配一个弱引用。尝试阅读此 answer还有
关于iOS : dealloc is not getting called if strong delegate set to self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837016/