我遇到了NSString的问题。
NSString* str = [[NSString alloc] initWithString:@"Hello world"];
在上面的代码中,我是否需要释放对象str?根据规则,此对象是使用alloc创建的,因此应使用release方法显式释放。但是,当我没有明确释放它时,我在仪器中找不到任何内存泄漏。 当NSString被NSNumber替换时,会发生内存泄漏。
有人能给我一些建议吗?感谢。
答案 0 :(得分:5)
是的,你确实需要发布它。仪器,泄漏,ObjectAlloc和朋友等工具并非绝对可靠;也因为你使用了一个常量字符串来创建实例,所以很可能不会发生泄漏。但是,如果您+alloc
一个对象,您还应该-release
它以确保该对象不会泄漏,因此您确实需要释放此对象。
我通常的Cocoa内存管理文章链接:http://iamleeg.blogspot.com/2008/12/cocoa-memory-management.html
答案 1 :(得分:3)
您所看到的可能是实施细节。我怀疑-[NSString initWithString:]
带有一个参数的不可变字符串,只保留其参数并返回它。对于像@"Hello world"
这样的常量字符串,它们会在程序的生命周期中保持不变,因此保留和释放不会执行任何操作。
但你不需要注意其中的任何一个。 Cocoa只是保证,如果你遵循内存管理指南,你的内存将得到妥善管理。究竟如何在幕后工作通常不是你应该关注的事情 - 只是你是否遵循规则。