使用以下表示法创建字符串时:
NSString *foo = @"Bar";
是否需要发布foo
?或者foo
在这种情况下自动释放?
编译器分配的字符串(格式为@"STRING")是常量,因此忽略了-retain,-release和-autorelease消息.在这种情况下,您不必释放或自动释放foo(但它不会受到伤害).
如文档中所述
http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/MemoryManagementRules.html
如果使用名称以"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
一定不能在这里传递.