ARC下强引用弱引用retainCount增减规律

来源:互联网 发布:txt阅读软件下载 编辑:程序博客网 时间:2024/06/06 15:02

本文只是记录ARC下不同引用时rc变化规律,不涉及基本原理。

    NSString *bstr = [NSString stringWithFormat:@"bbb"];    NSLog(@"bstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)bstr));    NSString *str = bstr;    NSLog(@"str-->%ld", CFGetRetainCount((__bridge CFTypeRef)str));    NSLog(@"bstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)bstr));    printf("\n");    __weak NSString *sstr = bstr;    NSLog(@"sstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)sstr));    NSLog(@"bstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)bstr));    NSLog(@"str-->%ld", CFGetRetainCount((__bridge CFTypeRef)str));
 bstr-->2 str-->3 bstr-->3 sstr-->4 bstr-->3 str-->3


第二组,将bstr声明为__weak类型:


    __weak NSString *bstr = [NSString stringWithFormat:@"bbb"];    NSLog(@"bstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)bstr));    NSString *str = bstr;    NSLog(@"str-->%ld", CFGetRetainCount((__bridge CFTypeRef)str));    NSLog(@"bstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)bstr));    printf("\n");    __weak NSString *sstr = bstr;    NSLog(@"sstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)sstr));    NSLog(@"bstr-->%ld", CFGetRetainCount((__bridge CFTypeRef)bstr));    NSLog(@"str-->%ld", CFGetRetainCount((__bridge CFTypeRef)str));
 bstr-->2 str-->2 bstr-->3 sstr-->3 bstr-->3 str-->2

对比以上结果,可以得出规律,__strong = __strong则都+1,__weak = __strong则weak+1而strong不变,__strong = __weak仍然weak+1而strong不变,__weak = __weak则都不变(等号表示赋值)。

另外,当@"bbb"以类方法产出时,bstr无论是强还是弱,其rc都是2,因此由以上规律可推测(第3、4条)类方法传出的应该是个weak指针,所以也才因此无关使用者而可以自己负责生命周期吧。

0 0
原创粉丝点击