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

原文:http://coolketang.com/staticCoding/5a99261ffe88c21c80b14c31.html

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 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载
相关文章
相关标签/搜索