@“Strings”如何在内存中分配?

时间:2010-12-14 04:55:29

标签: objective-c cocoa memory-management

我很好奇以下代码的内存分配。

NSString *myString = [NSString string];

我知道这会创建一个自动释放的空字符串@""

当我打电话

时会发生什么
myString = @"Hello world";

我的引用是否与提供的自动释放对象NSString相同,或者我只是分配了一个我负责释放的新对象?

1 个答案:

答案 0 :(得分:8)

当想知道你是否拥有一个物体时,问问自己:

我用来创建这个对象的方法......

  • new
  • 开头
  • alloc
  • 开头
  • 包含copy
  • 相等retain

如果您对其中任何一个回答“是”,那么您有责任在返回的对象上调用releaseautorelease。 (请注意,Core Foundation对象的规则略有不同。另请注意,文档明确说明与此相矛盾的任何内容都会获胜。文档始终取代指南)

对于您的字符串,您所有问题的答案都是“否”,因此您不对该对象负责。常量字符串(样式@"foo")被硬编码到应用程序二进制文件中,并且不能被释放。然而,这是一个实现细节。只要遵循内存管理规则,你就会很好!