关于retainCount在不同场合输出值不符合预期的分析
2018-02-08 15:52
344 查看
1、NSString、NSMutableString 和 NSArray、NSMutableArray
void x(void) { NSString *str = [[NSString alloc]init]; //定义初始一个对象 //NSArray *str = [[NSArray alloc]init]; //这句的下面的结果也是一样的 NSLog(@"str的引用计数 %lu",str.retainCount); //str的引用计数 18446744073709551615 (64位最大正整数) //即为有符号的-1 //疑问 1:为什么不是1呢 void (^block)(void) = ^(void) { NSLog(@"str的引用计数 %lu",str.retainCount); //str的引用计数 18446744073709551615 (64位最大正整数) //即为有符号的-1 //疑问 1:为什么不是1呢 }; NSLog(@"str的引用计数 %lu",str.retainCount); //str的引用计数 18446744073709551615 (64位最大正整数) //即为有符号的-1 //疑问 1:为什么不是1呢 block(); }
void x(void) { NSMutableString *str = [[NSMutableString alloc]init]; //定义初始一个对象 //NSMutableArray *str = [[NSMutableArray alloc]init]; //这句的下面的结果也是一样的 NSLog(@"str的引用计数 %lu",str.retainCount); //1 疑问 2:又为什么是1了呢? void (^block)(void) = ^(void) { NSLog(@"str的引用计数 %lu",str.retainCount); //1 疑问 2:又为什么是1了呢? }; NSLog(@"str的引用计数 %lu",str.retainCount); //1 疑问 2:又为什么是1了呢? block(); }
结论:
大概编译器对NSXXXX和NSMutableXXXX做了优化,而让NSXXXX的引用计数为 -1 ,而NSMutableXXXX的引用计数为 1。
对于字符串、数组常量,系统不会收回,也不会对其作引用计数,即使我们对s如何retain或release
没有必要去特地查询一个对象的retain count是多少。查询的结果常常会出乎意料。
2、NSObject
void x(void) { NSObject *str = [[NSObject alloc]init]; NSLog(@"str的引用计数 %lu",str.retainCount); //1 void (^block)(void) = ^(void) { NSLog(@"str的引用计数 %lu",str.retainCount); //1 }; NSLog(@"str的引用计数 %lu",str.retainCount); //1 block(); }
相关文章推荐
- 关于release后retainCount还是1的问题
- 关于cocos2dx不同平台图片渲染实现的分析
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- 关于printf系列格式化输出函数,%S格式的分析
- 关于monkey测试通过不同入口Intent启动app引起的anr分析
- 【原创】packetbeat 之“协议数据包分析每次输出结果均不同”问题
- 关于NSString的retainCount的各种结果原因
- 关于将Webpack,编译文件输出到不同的目录下
- 关于OC中NSString类型的 retainCount为-1的情况
- 关于数组的不同方式输出值的问题 int [][]s1=new int [3][2];
- 关于java和c++中 i=i++结果不同的分析
- Log4j按级别输出日志到不同文件配置分析
- 关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entit
- ios关于retainCount的一些疑问
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出日志到不同文件配置分析
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- 关于localtime 函数输出与上海时间不同
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件