使用以下表示法创建字符串时:
NSString *foo = @"Bar";
是否需要发布foo
?或者foo
在这种情况下自动释放?
答案 0 :(得分:17)
编译器分配的字符串(格式为@“STRING”)是常量,因此忽略了-retain,-release和-autorelease消息。在这种情况下,你不必释放或自动释放foo(但它不会受到伤害)。
答案 1 :(得分:15)
如文档中所述
如果您拥有对象的所有权 使用名称为的方法创建它 以“alloc”或“new”开头 包含“复制”(例如,alloc, newObject,或mutableCopy),或者如果你 发送一条保留信息。你是 负责放弃 您拥有的对象的所有权 释放或自动释放。任何其他时间 你收到一个物品,你绝对不能 释放它。
由于您没有使用alloc,copy等,因此无需担心释放对象。
答案 2 :(得分:7)
我同意@Ben \ Gottlieb在“编译器分配的字符串(格式为@”STRING“)是常量”但是因为你没有通过传递alloc
或retain
消息来初始化它们,您不得将release
或autorelease
消息传递给他们,否则您的应用会因以下日志而崩溃
“被释放的指针不是 分配“
<强> NOTE 强>
NSString *str = [NSString string];
相当于:
NSString *str = [[[NSString alloc] init] autorelease];
所以release
或autorelease
也不能在这里传递。