iOS : dealloc is not getting called if strong delegate set to self

标签 ios delegates dealloc strong-references

比如说,我有一个 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(就像我们为 MKMapViewUIWebView),它将为同一个 TempViewController 类调用 dealloc。

是什么导致了这个问题?有什么帮助,建议吗?

最佳答案

这也意味着您仍然持有或引用另一个类的属性,并且编译器无法调用该类的 dealloc 方法。如果你完成了,你要么将它设置为 nil,要么为它分配一个弱引用。尝试阅读此 answer还有

关于iOS : dealloc is not getting called if strong delegate set to self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837016/

相关文章:

ios - 在 iCarousel 上重用标识符

ios - FMDB更新版本号不起作用

c# - .NET Framework 支持空操作语法或单例

c++ - 难以置信的快速 C++ 委托(delegate)和不同的翻译单元

objective-c - 在 Objective-c 中,如果父方法在子方法执行时释放了子方法,会发生什么?

iphone - NSTimer 没有停止

ios - 共享扩展在 Chrome 中不起作用

ios - 键盘扩展内存泄漏?

ios - iOS 中的多重继承和 AppDelegate (swift)

objective-c - Objective C - dealloc 委托(delegate)上的调用方法