控件,代理为什么使用Weak?
来源:互联网 发布:jo抢购软件下载 编辑:程序博客网 时间:2024/05/16 15:00
好多初学者都很不明白,控件,代理为什么要使用weak,主要有以下几个问题:
- 控件(SB中拖线)为什么要使用weak
- 代理为什么使用weak(比如系统内置类UITableView的的delegate)
1.apple官方是建议我们控件从Storyborad拉线的时候要使用weak,至于为什么要使用weak,
原因是这样的:
控件放在storyborad中,表示控制View强引用着这个控件,而此时如果控件使用strong修饰而
不使用weak修饰,会造成的问题就是内存泄露.
那么内存是怎么泄露的?如图所示:
分析:控制器强引用这控制器View,View强引用控件,如果控件使用strong修饰,就相当于控件
,此时就会造成内存泄露!如果用weak修饰,当控制器销毁,View强引用控件,而控件弱引用View,
当控制器销毁,这两者就会真正销毁!(在ARC中,当一个对象没有被强指针引用的时候,那么这个
对象就要释放),
以上内存释放的过程是这样子的:
当控制器销毁的时候(假设导航栏推出一个新的控制器),此时控制器View没有被控件弱引用(控件用
weak),所以控制器View也要跟着销毁,同理控件没有View的强引用(View销毁了)之后,也跟着销毁.
这样就达到了内存释放!
以上分析也可以解释为什么delegate要是weak而不使用strong,防止循环引用,造成内存泄露!
2.当我们自己创建的控件的时候,为什么要使用strong.
原因很简单:ARC中的内存管理中,当一个对象没有强引用的时候那就会被释放,所以只能用strong修饰.
实例:
//创建一个button,如果用weak修饰@property (nonatomic,weak) UIButton *btn //实例化对象_btn = [[UIButton alloc] init];这样子对象一创建出来就会被销毁了
0 0
- 控件,代理为什么使用Weak?
- UI控件和代理为什么使用weak
- IOS开发--循环引用问题,普通控件为什么用weak,代理为什么用weak,block内用到外面的东西要用__weak
- UI控件为什么要用weak
- 使用weak指针的代理模式
- iOS中delegate代理对象使用weak
- IOS:代理delegate为什么要用assign或者weak
- iOS中代理属性为什么要用Weak修饰?
- iOS 为什么要用weak修饰代理(delegate)
- iOS中代理属性为什么要用Weak修饰?
- iOS中代理属性为什么要用Weak修饰?
- iOS中代理属性为什么要用Weak修饰?
- ios UI控件引用用weak,UI控件代理属性必须用weak
- 关于UI控件,代理用weak的原因
- ios-UI控件的引用和代理用weak
- 为什么 iOS 开发中,控件一般为 weak 而不是 strong?
- ios使用代理的时候一定要用weak
- iOS中delegate代理对象使用weak和assign哪个?
- 欢迎使用CSDN-markdown编辑器
- 迭代器
- oracle11g 云上dataguard 在线降低cpu内存 50% 后报错误ORA-27101的处理过程
- 欢迎使用CSDN-markdown编辑器
- C#做的接口
- 控件,代理为什么使用Weak?
- Exynos4412搭建最小文件系统
- AM3352 uboot中对NandFlash坏块的处理
- 自主分析input与button标签之间的区别
- Neural Networks
- 【步兵 lua】模拟继承
- Mysql实用SQL语句总结(持续更新)
- Oracle 11G Client 客户端安装
- 电商评价质量评分模型(一)