ARC下强引用弱引用retainCount增减规律
2015-09-07 17:17
423 查看
本文只是记录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声明为__weak类型:
对比以上结果,可以得出规律,__strong = __strong则都+1,__weak = __strong则weak+1而strong不变,__strong = __weak仍然weak+1而strong不变,__weak = __weak则都不变(等号表示赋值)。
另外,当@"bbb"以类方法产出时,bstr无论是强还是弱,其rc都是2,因此由以上规律可推测(第3、4条)类方法传出的应该是个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-->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指针,所以也才因此无关使用者而可以自己负责生命周期吧。
相关文章推荐
- Lua的内存管理浅析
- 深入探讨PHP中的内存管理问题
- linux 内存管理机制详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- javascript内存管理详细解析
- JavaScript内存管理介绍
- Cocos2d-x的内存管理总结
- 模拟实现C语言中的内存管理
- javascript错误的认识不用关心内存管理
- Python深入学习之内存管理
- 简单说说STL的内存管理
- InnoDB存储引擎的内存管理机制
- jemalloc优化MySQL、Nginx内存管理
- 【转】JVM内存管理:深入垃圾收集器与内存分配策略
- JavaScript内存管理介绍
- 25条提高iOS App性能的建议和技巧
- ios高效开发二--ARC跟block那点事
- C/C++内存管理详解
- Oracle 自动管理 ASMM
- Windows CE内存管理