objective-c - @"some text"是否返回一个自动释放或保留 1 个对象?

标签 objective-c memory-management autorelease

给定这段代码:

// Initialize string
NSString *name = @"Franzi";

@""宏创建一个带有给定文本(这里是名字 Franzi)和 RETAIN COUNT OF 1 的 NSString?

所以 @""给出了一个 NSString 是否必须被释放?我对这个对象负责吗? 第二个代码示例让我感到困惑,即使我是这样使用它的:

NSSting *message;
message = [NSString stringWithFormat:@"Hello @%!",name];
//message = [NSString stringWithFormat:@"Hello Girl!"];

因此消息在下一个运行循环 k 中被释放。但是作为 stringWithFormat 的参数给出的 NSString 是什么?

类对象 NSString 是否释放作为参数给出的 NSString @"Hello %@"/@"Hello Girl"? 还是 @""-Konstruktor 只返回自动释放的 NSString?

最佳答案

NSString 字面量符号 @"" 为您提供编译时常量字符串,这些字符串驻留在它们自己的内存空间中并具有常量地址。

与流行的看法相反,您不释放文字字符串的原因并不是因为它们是自动释放池的一部分。它们不是——相反,它们将整个应用程序的生命周期都花在它们在编译时分配的相同内存空间中,并且永远不会在运行时被释放。它们仅在应用进程终止时被删除。

也就是说,您唯一需要内存管理常量 NSString 的时候是您自己保留或复制它们的时候。在这种情况下,您应该释放保留或复制的指针,就像您处理任何其他对象一样。

另一件事:文字本身不需要内存管理。但是如果你将它们作为参数传递给 NSString 的便捷方法或初始化器,就像你对 stringWithFormat: 所做的那样,那么方法和初始化器返回的那些对象将跟随所有内存管理规则正常。

关于objective-c - @"some text"是否返回一个自动释放或保留 1 个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069459/

相关文章:

iphone - iOS : How to Preload Data before Display

objective-c - 如何使用单独的 viewController 正确设置 NSPopover

ios - 为什么自动释放对象还活着?

iphone - 区分动态生成的按钮

objective-c - Xcode - 如何将 c 库和头文件包含到 cocoa 项目中?

c++ - 在内存中的预定位置构造的对象 - SEGFAULT

c++ - 如何避免在 C++ 中重复删除变量?

memory-management - 如何划分分配区域,以便可以分别重新分配两个区域?

Objective-C 有没有办法判断对象是否设置为自动释放?

cocoa-touch - 什么时候自动释放实际上会导致 Cocoa Touch 中的释放?