代理属性为何要用 weak 修饰?
来源:互联网 发布:golang mobile 编辑:程序博客网 时间:2024/03/29 03:56
代理模式在 IOS 开发中的使用频率非常之高,然而很多人只是单纯地惯性使用,并没有弄清楚一点——要用 weak 修饰代理属性,今天就来细说这其中的缘由。
用一个实例进行说明(一共有三个类,BabyView 类,BabySitterView 类,ViewController 类,假设 BabyView 类想要做一些自己无法做的事情,就必须具有代理的属性,因此指定一个协议,而 BabySitterView 需要成为 BabyView 的代理,必须遵循协议,直接上代码截图):
BabyView 类:
BabySitter 类:
ViewController 类:
若使用 weak 修饰代理属性,则控制台打印输出为:
表示对象被顺利地销毁,调用了 Baby 类和 BabySitter 类的 delloc 方法,若使用 strong 修饰代理属性,则控制台没有打印,这表明造成了循环引用,对象不能正常释放。
图解:
若用 weak 修饰代理属性,则不会造成循环引用,而如果换为 strong 修饰代理属性,则图中的 BabyView 类向 Delegate 的连线由虚线变为实现,会造成循环引用,导致内存泄露。
代理属性为何要用 weak 修饰?
一句话来解决这个问题,就是为了避免循环引用。
阅读全文
1 0
- 代理属性为何要用 weak 修饰?
- iOS中代理属性为什么要用Weak修饰?
- iOS中代理属性为什么要用Weak修饰?
- iOS中代理属性为什么要用Weak修饰?
- iOS中代理属性为什么要用Weak修饰?
- iOS中代理属性用Weak修饰
- iOS 代理为啥要用weak修饰? (刨根问底一)
- iOS 代理为啥要用weak修饰? (刨根问底一)
- iOS 代理为啥要用weak修饰? (刨根问底一)
- iOS 为什么要用weak修饰代理(delegate)
- delegate 作为属性,为什么要用weak修饰?
- iOS中assign,copy,retain之间的区别以及weak和strong的区别 代理为啥要用weak修饰
- iOS内存管理(3)-- iOS 代理要用weak修饰
- 关于ARC下修饰代理用assign还是weak
- iOS 关于修饰代理用weak还是assign, strong
- iOS 关于修饰代理用weak还是assign
- iOS开发-修饰代理delegate用weak还是assign?
- ios UI控件引用用weak,UI控件代理属性必须用weak
- Access denied for user 'root'@'localhost' (using password:YES)解决方法
- Spring Boot JPA 连接数据库
- php define与const的区别
- 常见数据结构应用场景
- NIo、Bio、aio、 的原理及区别与应用场景
- 代理属性为何要用 weak 修饰?
- mysql jdbc 中文乱码解决方案
- ARM----- 移位操作(LSL、ASL、LSR、ASR、ROR、RRX)
- mysql5.5.47官方版本 同步数据到 percona 5.6.36-82-0的问题总结
- 获取本月的第一天和最后一天
- 源码解读----之-----KMeans
- 坐标系之间的旋转平移变换与对应变换矩阵的关系
- 桥接模式
- 安卓统一推送联盟 10 月 16 日正式成立