创建NSString后保留计数

Ale*_*eep 2 iphone

我正在通过以下方法创建一个NSString类型的对象

NSString *str = [[NSString alloc] initWithString:@"aaaaaaaaaaaaaaa"];
    NSLog(@"retain count == %d",[str retainCount]);
Run Code Online (Sandbox Code Playgroud)

之后我只打印保留计数值

2010-10-29 17:04:03.939示例[1580:207]保留计数== 2147483647

可以任何人回答这个为什么这里的日志打印这样的垃圾值

谢谢,

bbu*_*bum 18

不要使用-retainCount.

对象的绝对保留计数是没有意义的.

您应该调用release与保留对象完全相同的次数.不会少(除非你喜欢泄漏),当然,没有更多(除非你喜欢崩溃).

有关完整详细信息,请参阅内存管理指南


在这种特定情况下,您retain使用了一个调用alloc,因此,您需要在代码中的某个地方,任何地方调用release(或autorelease).

  • 为了澄清对此不熟悉的人,`autorelease`也算作对'release`的调用. (3认同)

Vla*_*mir 14

您正在从字符串文字创建不可变的NSString对象.字符串文字是在编译时创建的,并在程序的整个运行时间内生效 - 因此无法取消分配,保留/释放对它没有影响.为了优化(因为你的NSString无论如何都是不可变的),-initWithString:方法只能返回传递给它的字符串,以便字符串文字地址被分配给你的str变量.

如果您将初始化代码更改为,-initWithFormat:那么我认为您将获得预期的保留计数值