对象图里经常会出现一种情况,就是几个对象都以某种方式相互引用,从而形成环。这种情况通常会泄漏内存,因为最后没有别的东西会引用环中的对象。而环里的对象会因为相互间的引用而继续存活,不被系统回收。
避免保留环的最佳方式就是弱引用。这种引用经常用来表示“非拥有关系”。将属性声明为unsafe_unretained或weak即可。
weak与unsafe_unretained的区别在于,系统把对象实例回收后,weak属性会自动设置为nil,而unsafe_unretained属性仍然指向那个已经回收的实例,这样可能会不安全。
不过无论如何,只要在所指对象已经彻底销毁后还继续使用弱引用,那就依然是个bug、编程错误。
网友评论