NSString的内存问题

时间:2009-03-05 07:23:13

标签: objective-c cocoa

我遇到了NSString的问题。

NSString* str = [[NSString alloc] initWithString:@"Hello world"];

在上面的代码中,我是否需要释放对象str?根据规则,此对象是使用alloc创建的,因此应使用release方法显式释放。但是,当我没有明确释放它时,我在仪器中找不到任何内存泄漏。 当NSString被NSNumber替换时,会发生内存泄漏。

有人能给我一些建议吗?感谢。

2 个答案:

答案 0 :(得分:5)

是的,你确实需要发布它。仪器,泄漏,ObjectAlloc和朋友等工具并非绝对可靠;也因为你使用了一个常量字符串来创建实例,所以很可能不会发生泄漏。但是,如果您+alloc一个对象,您还应该-release它以确保该对象不会泄漏,因此您确实需要释放此对象。

我通常的Cocoa内存管理文章链接:http://iamleeg.blogspot.com/2008/12/cocoa-memory-management.html

答案 1 :(得分:3)

您所看到的可能是实施细节。我怀疑-[NSString initWithString:]带有一个参数的不可变字符串,只保留其参数并返回它。对于像@"Hello world"这样的常量字符串,它们会在程序的生命周期中保持不变,因此保留和释放不会执行任何操作。

但你不需要注意其中的任何一个。 Cocoa只是保证,如果你遵循内存管理指南,你的内存将得到妥善管理。究竟如何在幕后工作通常不是你应该关注的事情 - 只是你是否遵循规则。