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

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

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

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

2. 首先定义一个用来创建实例的类。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

3. 给类添加一个属性。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

4. 添加第二个属性,该属性的类型是一个自定义的类。我们将在后面的代码中实现该类。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

5. 添加一个初始化方法,以对名称属性进行设置。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

6. 接着添加一个析构方法,当该类的实例的引用计数为0时,该方法将被调用。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

7. 然后实现另一个自定义类。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

8. 给类添加两个属性,第二个属性的类型是第一个自定义类。这样两个类型的实例,就形成了相互引用的状态。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

9. 添加一个初始化方法,以对名称属性进行设置。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

10. 接着添加一个析构方法,当该类的实例的引用计数为0时,该方法将被调用。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

11. 声明两个自定义类型的对象。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

12. 接着对两个对象进行初始化操作,然后点击显示调试区图标,打开控制台。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

13. 在控制台显示了两个对象的初始化日志。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

14. 接着分别设置两个对象的实例属性,使两者相互交叉引用。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

15. 此时将两个实例对象设置为空,发现并没有在底部的控制台输出析构日志,说明它们的引用计数不为零。点击垂直滚动条,查看上方的内容。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

16. 那么如何避免因为交叉引用,而造成的内存泄露呢,我们只需要对其中一个引用稍加修改。 
6.9 实例的交叉引用和弱引用(weak) [Swift原创教程]

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

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


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