在ios开发中weak和strong的使用问题
来源:互联网 发布:淘宝教育是什么 编辑:程序博客网 时间:2024/05/22 06:34
1.控件作为属性时,一般使用weak修饰该属性
在ios中,如果是进行控件开发,那么一般控件作为一个属性变量时,一般都使用weak来修饰例:
@interface ViewController ()
@property (weak , nonatomic) IBOutlet UITableView *tableView;
@end
在控制器中使用weak修饰的原因是,控制器中有一个view,通过view中的addSubView添加这个tableView已经是强指针引用了,如果再在控制器中使用strong修饰的话,表示这个tableView有两个强指针引用,那么,当tableView调用removeFromSuperView方法时,因为tableView在控制器中还有一个强指针引用,这就导致tableView始终不能被销毁。所以为了避免这种情况,我们将控制器中的直接UI控件属性设置为weak修饰。
如果上面的_tableView属性改为了强指针,那么,当控制器中的UIView移除UITableView时,因为UITableView还存在强指针引用,所以不会被释放空间。
2.在控件中使用代理属性时,这个代理属性必须使用weak修饰
控件中的代理属性必须是weak修饰的,比如UISCrollView或者UITableView中的delegate都是用weak或者assign修饰的。
@property (nonatomic , assign) id <UITableViewDataSource > dataSource;
@property (nonatomic , assign) id <UITableViewDelegate > delegate;
从上面的控件中的UI控件属性变量一般使用weak可知,控制器中的view已经有对UITableView的强指针引用了,如果UITableView中的代理属性也为strong或者retain的话,那么就会出现循环引用了,导致谁也不愿意释放谁,所以为了避免相互引用的情况,控件的代理属性必须要使用weak或者assign修饰(非控件的代理可以用strong)。
如果上面的UITableView控件中的delegate属性是强指针的话,那么因为两边都是strong,就会出现相互引用的情况。
0 0
- 在ios开发中weak和strong的使用问题
- iOS开发 strong和weak的使用
- iOS中strong和weak的区别
- ios weak和strong使用的区别
- 在IOS开发中控件的weak与strong的分析
- iOS开发中weak和strong的用法和错误示例
- iOS开发中@property的属性weak nonatomic strong readonly
- iOS开发中@property的属性weak nonatomic strong readonly
- iOS开发-ARC下weak strong使用
- 【iOS开发】strong和weak区别
- [iOS]arc机制中strong和weak的形象理解
- iOS中strong&weak和_block&_weak的作用比较
- ios中strong和weak的解释理解
- iOS中关于atomic和nonatomic,assign、weak、strong、retain的使用、区别
- IOS-48-解决开发中自定义控件在不同型号手机上不能显示的问题 (区别在于iOS修改了weak、strong属性)
- IOS strong 和 weak
- ios strong和weak
- [ios] strong和weak
- 数据库的隔离级别以及锁
- 启动图片与控制器大小问题
- 求教,为何同一个模块,单独仿真有输出,和别的模块一起仿真就没有输出呢?
- 机房收费系统——UML图感想
- 项目0-春哥
- 在ios开发中weak和strong的使用问题
- sql 语句练习
- 全排列的递归问题可以参考这篇文章
- java web项目中开发中的注意点
- Summary Day21
- 编码需要注意的十个问题
- 十一周 项目1-储存班长信息的学生类
- leetcode刷题。总结,记录,备忘 191
- uva 136 丑数