strong、weak、copy、assign 应用

最近和朋友闲聊说到这个delegate属性都是assign而不是retain的,现将这几个整理区分下:

1、oc的所有、懒加载 用strong 指所有NS

@property (nonatomic, strong) NSIndexPath *indexPath;
@property (nonatomic, strong) NSMutableArray *arr_props;
复制代码

2、UI控件的用weak, 但如果是使用了懒加载的话(看什么时候添加到父控件上 和 父控件是不是有强指针指向) 用 strong

@property (nonatomic, weak) UILabel *label;
复制代码

3、字符串,block块用copy

@property (nonatomic, copy) NSString *title;
复制代码

4、结构体,枚举,基本数据类型用assign (delegate代理用assign不用retain)

@property (nonatomic, assign) NSInteger currentPageIndex;
CGFloat CGRect BOOL。。。
复制代码

5、控制器的话用weak时需要将自己添加子控制器

[self addChildViewController:m_tableView];
用strong时需要delloc
复制代码

问:为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的? 答:会引起循环引用。 这里delegate我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了。 而用retain的话,计数器加1。我们有可能在别的地方期望释放掉delegate这个对象,然后通过一些判断比如说它是否已经被释放,做一些操作。但是实际上它retainCount还是1,没有被释放掉,要在UITableViewController的dealloc里面才被释放掉(这里我只是举个例子,一般retain的对象都是在dealloc里被释放)。这里就会造成一些问题出现。 而如果你确定不会有冲突的问题出现的话,或者你也希望用到delegate的这个对象,直到你不用它为止,那么用retain也未尝不可,只是需要最后release一次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值