Objective c 目标C:这只是另一个问题
使用initWithFormat创建NSString时,保留计数为1Objective c 目标C:这只是另一个问题,objective-c,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,则计数为21474836
-(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."];
所以这两种方法在内存管理方面肯定有区别。这里发生了什么?首先,您不应该关心保留计数是多少,只应该关心您是否正确平衡了
-init
、-copy
和-retain
消息和-release
消息
也就是说,当您通过解析格式字符串来创建
NSString
实例时,会为其分配内存。通过引用代码中的常量字符串来创建字符串时,最终会得到一个指向该常量字符串的指针,其保留计数通常会显示为UINT_MAX。这是一个您不必担心的实现细节。@NSResponder/和世界其他地方/:不,不要平衡init、copy和retain。NARC是个问题,平衡新…,分配…,保留…和复制…消息是答案
问候