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