objective-c - @"Strings"在内存中是如何分配的?

标签 objective-c cocoa memory-management

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

NSString *myString = [NSString string];

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

当我打电话时会发生什么

myString = @"Hello world";

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

最佳答案

当想知道您是否拥有某个对象时,问问自己:

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

  • new开头?
  • alloc开头?
  • 包含副本
  • 等于保留

如果您对其中任何一个问题回答"is",那么您有责任对返回的对象调用 releaseautorelease。 (请注意,核心基础对象的规则略有不同。另请注意,文档明确指出与此相矛盾的任何内容均获胜。文档始终取代指南)

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

关于objective-c - @"Strings"在内存中是如何分配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436016/

相关文章:

iphone - 两个 Objective-C 内存管理问题 : Is Leak Detection Always Right? 和为什么 autorelease 工作但不释放?

ios - 如何在 mac OS 应用程序中使用 canOpenURL?

c - 编写我自己的内存管理器

objective-c - iOS 多人游戏

objective-c - 使用未声明的标识符 Objective-C 代码

macos - NSWindowController – 在窗口显示之前收到通知?

objective-c - 初始化由 nswindowcontroller 隐式调用的 nsviewcontroller

c - free() 在 c 代码中收集垃圾值,即使在释放后将指针设置为 NULL,代码也不起作用

objective-c - 在 cocoa 应用程序中从 GPS 设备 (USG-MR350) 获取位置数据的 API/方法?

iphone - NSString 双重问题