美文网首页2016技术笔记
2016笔记——代理

2016笔记——代理

作者: 满庭花醉三千客 | 来源:发表于2018-07-27 11:13 被阅读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

    加油

    相关文章

      网友评论

        本文标题:2016笔记——代理

        本文链接:https://www.haomeiwen.com/subject/dhmwmftx.html