当我使用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."];
因此,在内存管理方面,这两种方法之间必须存在差异。这里发生了什么?
答案 0 :(得分:4)
首先,您不应该关心保留计数是什么,只关注您是否正确平衡-init
,-copy
和-retain
条消息-release
或-autorelease
消息。
话虽这么说,当您通过解析格式字符串创建NSString
实例时,会为其分配内存。通过在代码中引用常量字符串来创建字符串时,最终会得到指向该常量字符串的指针,其保留计数通常会显示为UINT_MAX。这是一个您不必担心的实现细节。
答案 1 :(得分:-1)
@NSResponder /和世界其他地方/:不,不要平衡init,复制和保留。 NARC是问题,平衡新...,分配...,保留...和复制...消息就是答案!
问候