Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:这只是另一个问题_Objective C - Fatal编程技术网

Objective c 目标C:这只是另一个问题

Objective 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

使用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."];

所以这两种方法在内存管理方面肯定有区别。这里发生了什么?

首先,您不应该关心保留计数是多少,只应该关心您是否正确平衡了
-init
-copy
-retain
消息和
-release
消息


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

@NSResponder/和世界其他地方/:不,不要平衡init、copy和retain。NARC是个问题,平衡新…,分配…,保留…和复制…消息是答案

问候