2016技术笔记

2016笔记——代理

2018-07-27  本文已影响3人  满庭花醉三千客

在开发中,我们经常会遇到代理,或者自己写代理,而代理的属性都用weak修饰,看过有些开发者用strong,但是并未发现有何不妥,也不清楚用weak与strong修饰有何区别。

weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制

strong:该对象饮用delegate,外界不能销毁delegate对象,会导致循环引用。

举例:

Dog.h 文件

屏幕快照 2016-02-24 11.41.24.png

Dog.m文件:

屏幕快照 2016-02-24 11.41.33.png

Person.h文件:

屏幕快照 2016-02-24 11.41.00.png

Person.m文件:

屏幕快照 2016-02-24 13.25.26.png

ViewController中实现:

屏幕快照 2016-02-24 13.25.05.png

注:以上测试环境为ARC环境。

看一下打印的东西:

weak时:

屏幕快照 2016-02-24 13.29.34.png

strong时:

无打印,说明Person和Dog对象都没有调用dealloc方法,两个对象未销毁。

这就是我们经常说的内存泄漏,该释放的内存并未释放!

具体分析之:

strong:

屏幕快照 2016-02-24 13.36.47.png

weak:

屏幕快照 2016-02-24 13.36.47 2.png

此外,assign修饰的变量,当其retainCount为0时,什么也不会做。weak修饰的变量,当其retainCount为0时,会将该变量置为nil。

最后,看一看人家苹果的代理方法(UITableView):

屏幕快照 2016-02-24 14.33.15.png

加油

上一篇下一篇

猜你喜欢

热点阅读