NSString* s1=@”ssgsdgsdgsdg”; NSLog(@”%d”,[s1 retainCount]); //-1 NSString* s2=[s1 copy]; NSLog(@”%d”,[s2 retainCount]); //-1 为什么是-1, 原因是: 字符串存储在 类似C++中的常量区,对吧。 但是如下代码如何解释? NSString* s1=[ [NSString alloc ]init]; NSLog(@”%d”, [s1 retainCount]); 结果是-1 ,我没有释放之, 用官话来说, 只要alloc消息了,就成了1 ,为什么为-1 ,解释一下,谢谢。 NSString* s=[[NSString alloc] initWithString:@” nihao”]; NSLog(@”%@”,s); NSLog(@”%d”, [s retainCount]); //-1 也是-1,为什么, [s release]; NSLog(@”%d”, [s retainCount]); //-1 |
|
不知道你为什么纠结retaincount
|
|
我之所以纠结,是因为看到 内存管理哪一章, 如果不为0 ,那么内存不释放。
我觉得这个问题挺严重的 ,,, 肯定是我没有领会内存管理的精髓。 所以才请教一下。 欢迎高手指点 |
|
retaincount 是系统来自动加减的吧
|
|
10分 |
NSString 是存储在常量区的,它是不会被自动释放。这个和c语言的常量字符串是一样的!
|
不完全对 ,如果是initWithFormat ,有这个方法吧 ,就要释放,因为用到了 alloc |
|
晕死,我还是第一次见到retaincount会等于-1的,不是说为0的时候系统就会自动释放了吗?
-1怎么解释? 难道对象这东西还能赊账的? 如果真有-1这个值那我要再去好好看看内存管理这东西了 |
|
NSString 存储在常量区,不会被自动释放.
|
|
10分 |
lz你机器出问题。。。话说这个retaincount本来就不是很准
|