delegate 为什么用 weak assign 修饰

我们平常在写一个ViewController时,经常会把属性设为strong,如

@property (nonatomic, strong) UITableView * tableView;

@property (nonatomic, strong) NSMutableArray * datasource;

@property (nonatomic, strong) NWListView   *listView;

因为在ARC环境中,这些属性会在ViewController dealloc时被释放。

那么代理,block为什么要设置为weak,这样做是为了防止循环引用导致内存泄漏。

weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此是儿子的所有者;
但是为了阻止所有权回环,儿子需要使用weak指针指向父亲;
你的viewcontroller通过strong指针拥有一个UITableview,tableview的datasource和delegate都是weak指针,指向viewcontroller,防止回环; 
图片:weak1.jpg 
我们新建一个类,首先要考虑的是,这个类会被别人用strong引用,如上图的UITableView,所以这个类的一些delegate要用weak来修饰以防止拥有此类的类就是代理类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值