iOS NSString retainCount遇到的问题
2016-06-22 16:55
507 查看
NSString的内存管理
昨天做了一道面试题,第一题就是关于NSString的内存管理的,直接上代码。现有如下person.m文件,请写出test方法执行后的输出。 @interface Parent : NSObject @property(nonatomic, strong) NSString *sstr; @property(nonatomic, copy) NSString* cstr; - (void)test; @end @implementation Parent - (void)test{ NSString *str = [NSString stringWithFormat:@"hello"]; self.sstr = str; self.cstr = str; NSLog(@"str: %d %@",(int)[str retainCount],str); NSLog(@"sstr: %zi %@",[self.sstr retainCount],str); NSLog(@"cstr: %zi %@",[self.cstr retainCount],str); NSMutableString *mstr = [NSMutableString stringWithFormat:@"hello2"]; self.sstr = mstr; self.cstr = mstr; NSLog(@"str2: %zi %@",[mstr retainCount],mstr); NSLog(@"sstr: %zi %@",[self.sstr retainCount],self.sstr); NSLog(@"cstr: %zi %@",[self.cstr retainCount],self.cstr); } @end
在xcode7.2 的系统上,iPhone6s,iOS9.1的系统上打印的是
2016-06-22 16:39:15.791 test[743:263379] str: -1 hello 2016-06-22 16:39:15.792 test[743:263379] sstr: -1 hello 2016-06-22 16:39:15.792 test[743:263379] cstr: -1 hello 2016-06-22 16:39:15.792 test[743:263379] str2: 2 hello2 2016-06-22 16:39:15.792 test[743:263379] sstr: 2 hello2 2016-06-22 16:39:15.792 test[743:263379] cstr: -1 hello2
但是在iPhone4s,iOS7上面打印的是
2016-06-22 16:40:41.444 test[316:60b] str: 3 hello 2016-06-22 16:40:41.450 test[316:60b] sstr: 3 hello 2016-06-22 16:40:41.453 test[316:60b] cstr: 3 hello 2016-06-22 16:40:41.456 test[316:60b] str2: 2 hello2 2016-06-22 16:40:41.460 test[316:60b] sstr: 2 hello2 2016-06-22 16:40:41.463 test[316:60b] cstr: 1 hello2
感觉很奇怪,先说下在iOS9.1上的问题吧,大家可以参考
Objective-C中NSString对象retainCount之谜探索
NSString特性分析学习
看了半天也没有理解清楚,只是知道,如果用
NSString *str1 = @"1234567890";
字符串常量,类似于C语言形式,静态区存储,系统不会采用计数方式回收,所以不会对其作引用计数,即使我们对s如何retain或release,其值保持不变,对象也保持不变。
关于retain和copy的区别,还需要多理解下内存管理方面的知识。
相关文章推荐
- 一个关于if else容易迷惑的问题
- 页面缓存:内存和文件之间的那些事
- Lua的内存管理浅析
- 一道sql面试题附答案
- C# 超高面试题收集整理
- 跟我学习JScript的Bug与内存管理
- 人人网javascript面试题 可以提前实现下
- 跟我学习javascript的垃圾回收机制与内存管理
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)
- 10个经典的Java main方法面试题
- 小米公司JavaScript面试题
- 超级全面的PHP面试题整理集合第1/2页
- 深入探讨PHP中的内存管理问题
- 极易被忽视的javascript面试题七问七答
- 5个实用的shell脚本面试题和答案
- PHP经典面试题集锦
- 8个PHP数组面试题