ARC 下属性的引用计数

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;
}