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