6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]



1. 本节课将通过一个实例,演示内存的泄露问题以及如何修复。


2. 首先定义一个用来创建实例的类。


3. 给类添加一个属性。


4. 添加第二个属性,该属性的类型是一个自定义的类。我们将在后面的代码中实现该类。


5. 添加一个初始化方法,以对名称属性进行设置。


6. 接着添加一个析构方法,当该类的实例的引用计数为0时,该方法将被调用。


7. 然后实现另一个自定义类。


8. 给类添加两个属性,第二个属性的类型是第一个自定义类。这样两个类型的实例,就形成了相互引用的状态。


9. 添加一个初始化方法,以对名称属性进行设置。


10. 接着添加一个析构方法,当该类的实例的引用计数为0时,该方法将被调用。


11. 声明两个自定义类型的对象。


12. 接着对两个对象进行初始化操作,然后点击显示调试区图标,打开控制台。


13. 在控制台显示了两个对象的初始化日志。


14. 接着分别设置两个对象的实例属性,使两者相互交叉引用。


15. 此时将两个实例对象设置为空,发现并没有在底部的控制台输出析构日志,说明它们的引用计数不为零。点击垂直滚动条,查看上方的内容。


16. 那么如何避免因为交叉引用,而造成的内存泄露呢,我们只需要对其中一个引用稍加修改。


17. 在声明变量的前方,增加了weak弱引用标识符,向编译器说明不希望持有对该实例的引用。此时在控制台输出了析构日志,说明内存已经被正常释放了。




本文整理自:《Swift4互动教程》,真正的[手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载:https://itunes.apple.com/cn/app/id1320746678,或扫描本页底部的二维码。课程配套素材下载地址:资料下载

0