高手解答一下,NSString的诡异问题,

iOS 码拜 10年前 (2015-05-08) 807次浏览 0个评论
 

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 ,那么内存不释放。

我觉得这个问题挺严重的 ,,, 肯定是我没有领会内存管理的精髓。

所以才请教一下。

欢迎高手指点

引用 1 楼 arthurchenjs 的回复:

不知道你为什么纠结retaincount

retaincount 是系统来自动加减的吧
10分
NSString 是存储在常量区的,它是不会被自动释放。这个和c语言的常量字符串是一样的!
引用 4 楼 wpalhm 的回复:

NSString 是存储在常量区的,它是不会被自动释放。这个和c语言的常量字符串是一样的!

  不完全对 ,如果是initWithFormat  ,有这个方法吧 ,就要释放,因为用到了 alloc

晕死,我还是第一次见到retaincount会等于-1的,不是说为0的时候系统就会自动释放了吗?
-1怎么解释?
难道对象这东西还能赊账的?

如果真有-1这个值那我要再去好好看看内存管理这东西了

NSString 存储在常量区,不会被自动释放.
10分
lz你机器出问题。。。话说这个retaincount本来就不是很准

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明高手解答一下,NSString的诡异问题,
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!