文字NSString是自动释放还是需要发布?

时间:2008-12-01 03:40:17

标签: objective-c cocoa-touch memory-management nsstring literals

使用以下表示法创建字符串时:

NSString *foo = @"Bar";

是否需要发布foo?或者foo在这种情况下自动释放?

3 个答案:

答案 0 :(得分:17)

编译器分配的字符串(格式为@“STRING”)是常量,因此忽略了-retain,-release和-autorelease消息。在这种情况下,你不必释放或自动释放foo(但它不会受到伤害)。

答案 1 :(得分:15)

如文档中所述

http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/MemoryManagementRules.html

  

如果您拥有对象的所有权   使用名称为的方法创建它   以“alloc”或“new”开头   包含“复制”(例如,alloc,   newObject,或mutableCopy),或者如果你   发送一条保留信息。你是   负责放弃   您拥有的对象的所有权   释放或自动释放。任何其他时间   你收到一个物品,你绝对不能   释放它。

由于您没有使用alloc,copy等,因此无需担心释放对象。

答案 2 :(得分:7)

我同意@Ben \ Gottlieb在“编译器分配的字符串(格式为@”STRING“)是常量”但是因为你没有通过传递allocretain消息来初始化它们,您不得将releaseautorelease消息传递给他们,否则您的应用会因以下日志而崩溃

  

“被释放的指针不是   分配“

<强> NOTE

NSString *str = [NSString string];

相当于:

NSString *str = [[[NSString alloc] init] autorelease];

所以releaseautorelease也不能在这里传递。