几个对象都以某种方式互相引用,从而形成保留环。由于OC内存管理模型使用引用计数架构,所以这种情况通常会导致内存泄漏,因为最后没有别的对象会引用环中的对象。环里的对象将永久存活,不会被系统回收。
避免保留环的最佳方式就是弱引用,即“非拥有关系”。OC中有一项与ARC相伴的运行期特征,可以令开发者安全的使用弱引用,weak,它和unsafe_unretained的作用完全相同。只要系统把属性回收,属性值就自动设为nil。
但是,只要在所指对象已经彻底销毁后还继续使用弱引用,那就依然是个bug。比如说,用户界面中的某个元素会把数据源设置给某个属性,并通过它来查询将要显示的数据了。
总结: 1.将某些引用设置为weak,可避免出现“保留环”。 2.weak引用可以自动清空,也可以不自动清空。自动清空是随着ARC而引入的新特性,由运行期系统来实现。在具备自动清空的弱引用上,可以随意读取其数据,因为这种引用不会指向已经回收过的对象。