Swift笔记-发现循环引用

ARC在iOS5中被提出,让内存管理变得非常简单。
但ARC不能处理所有情况(在Xcode7.2中一般的retain-cycles已经有提示警告了),APP仍然可能会遇到循环引用的问题。
如果存在循环引用,应用程序的内存会不断增加,App会被被操作系统终止(App崩溃)。

小Tips

在Swift中,如果一个对象被销毁,会执行对应的deinit。只需在类中的deinit方法中添加一个打印信息:

//伪代码  
deinit {
    print("xxxViewController deinit")
}

当移除xxxViewController,调试窗口没有日志信息,说明xxxViewController并没有被销毁。
此时,将相互强引用的两个对象之一声明为weak属性,就不会有什么问题了。将哪个对象声明为weak依据具体情况来选择。

最后

对于循环引用,也可以使用Xcode自带的内存检测工具Instruments来检测。
这里在deinit增加一条日志信息的方法,可以持续检测销毁行为。

参考: Thomas Hanning

请我吃颗糖,鼓励我继续创作!