【问题标题】:Memory issue of NSStringNSString 的内存问题
【发布时间】:2009-03-05 07:23:12
【问题描述】:

我遇到了 NSString 的问题。

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

在上面的代码中,我需要释放对象str吗?按照规则,这个对象是用alloc创建的,所以应该用release方法显式释放。但是,当我没有明确释放它时,我在 Instruments 中找不到任何内存泄漏。 当 NSString 被 NSNumber 替换时,就会发生内存泄漏。

谁能给我一些建议?谢谢。

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    是的,您确实需要释放它。 Instruments、Leaks、ObjectAlloc 等工具并非万无一失。还因为您使用常量字符串来创建实例,所以完全有可能不会发生泄漏。但是,如果你+alloc一个对象,你也应该-release它以确保对象不会泄漏,所以你确实需要释放这个对象。

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

    【讨论】:

      【解决方案2】:

      您看到的可能是一个实现细节。我怀疑带有不可变字符串的-[NSString initWithString:] 只是保留其参数并返回它。对于像@"Hello world" 这样的常量字符串,它们会在程序的生命周期内一直存在,所以保留和释放不会做任何事情。

      但是你不需要注意这些。 Cocoa 只是保证,如果您遵循内存管理准则,您的内存将得到妥善管理。它在幕后是如何运作的通常不是你应该关心的——只是你是否遵守规则。

      【讨论】:

      • 换一种说法:遵守规则,您的应用就不会泄露(除非某处出现错误)。不遵守规则,你的应用就会泄露——总有一天,如果不是现在。
      猜你喜欢
      • 2011-01-24
      • 1970-01-01
      • 2016-06-15
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多