Objective-C:另一个保留计数问题

时间:2010-07-20 05:52:17

标签: objective-c

当我使用initWithFormat创建NSString时,我得到一个保留计数为1

-(NSString *)description
{
 NSString *descr = [[NSString alloc]
 initWithFormat:@"I am the description."];

 NSLog(@"Count: %lu",[descr retainCount]);

 return [descr autorelease];
}

如果我使用initWithString,我的计数为2147483647

NSString *descr = [[NSString alloc]
initWithString:@"I am the description."];

因此,在内存管理方面,这两种方法之间必须存在差异。这里发生了什么?

2 个答案:

答案 0 :(得分:4)

首先,您不应该关心保留计数是什么,只关注您是否正确平衡-init-copy-retain条消息-release-autorelease消息。

话虽这么说,当您通过解析格式字符串创建NSString实例时,会为其分配内存。通过在代码中引用常量字符串来创建字符串时,最终会得到指向该常量字符串的指针,其保留计数通常会显示为UINT_MAX。这是一个您不必担心的实现细节。

答案 1 :(得分:-1)

@NSResponder /和世界其他地方/:不,不要平衡init,复制和保留。 NARC是问题,平衡新...,分配​​...,保留...和复制...消息就是答案!

问候