我是第一次使用Objective C程序员。我一直在阅读其他人的代码,我经常看到创建的静态字符串但从未发布。以此为例:
- (UITableViewCell*)tableView:(UITableView*)tableView
cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSSSTring* foo = @"foo";
// [code to return a cell for the table]
}
根据我的理解,已经分配了堆中3个字符的空间来存储字符串“foo”。当程序终止时,这3个字符永远不会被回收,因为作者永远不会释放它们。这里没有内存泄漏吗?为什么或为什么不呢?
答案 0 :(得分:1)
实际上,编译器会特别处理像@"foo"
这样的常量字符串。特别是,它们不堆分配,并且它们不参与引用计数,即它们从未实际释放;他们的记忆是你的程序图像的一部分,就像"foo"
的内容一样。但是,这应该被视为此特定类型的NSString
子类的实现细节。遵循通常的参考保留/释放规则。