内存从静态NSString泄漏

时间:2011-04-20 00:55:37

标签: objective-c cocoa-touch memory-management

我是第一次使用Objective C程序员。我一直在阅读其他人的代码,我经常看到创建的静态字符串但从未发布。以此为例:

- (UITableViewCell*)tableView:(UITableView*)tableView 
   cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
   static NSSSTring* foo = @"foo";
   // [code to return a cell for the table]
}

根据我的理解,已经分配了堆中3个字符的空间来存储字符串“foo”。当程序终止时,这3个字符永远不会被回收,因为作者永远不会释放它们。这里没有内存泄漏吗?为什么或为什么不呢?

1 个答案:

答案 0 :(得分:1)

实际上,编译器会特别处理像@"foo"这样的常量字符串。特别是,它们堆分配,并且它们不参与引用计数,即它们从未实际释放;他们的记忆是你的程序图像的一部分,就像"foo"的内容一样。但是,这应该被视为此特定类型的NSString子类的实现细节。遵循通常的参考保留/释放规则。