ARC下属性的引用计数

独奏

技术分享|2014-8-8|最后更新: 2023-2-23|
type
Post
status
Published
date
Aug 8, 2014
slug
summary
tags
iOS
category
技术分享
icon
password

OC在ARC下什么情况下会使引用计数加一

这里分三种情况,如下:
@interface Dog: NSObject{ NSDictionary *_aDic; __weak NSDictionary *_dDic; } @property (nonatomic,strong)NSDictionary *bDic; @property (nonatomic,weak)NSDictionary *cDic; @implementation Dog{ NSDictionary *_eDic; }
当使用点语法来赋值的时候。retainCount肯定会加一的。但是当我们通过下划线的方式来使用时,是否会加一呢?

实验

思路:
ARC下不允许使用retainCount,所以我考虑加断点,然后通过xCode下命令输入po _aDic.retainCount来查看当前变量的引用计数,事实证明是可行的,代码以及结果如下
_aDic = dict;//retainCount +1_bDic = dict;//retainCount +1_cDic = dict;//retainCount 不加1_dDic = dict;//retainCount 不加1_eDic = dict;//retainCount +1

总结

可见,属性值写在大括号内,和直接通过property声明基本是一致的,默认引用计数是加一的。如果不需要加一,那么可以用weak来修饰它

SO…

我们重写setter的时候,可以这么写啦。系统会自动根据是否加了weak修饰,来决定是否给这个变量的引用技术加一
- (void)setBDic:(NSDictionary *)dic{ DLog(@"setter"); _bDic = dic; }