NSString *str = [[[[NSString alloc]init]autorelease]autorelease];
str = @"hii";
NSLog(@"%@",str);
有人能帮我解释这段代码吗?如果一个对象被自动释放两次会发生什么?当我运行这段代码时,我没有收到任何僵尸对象的警告。为什么会这样?
NSString *str = [[[[NSString alloc]init]autorelease]autorelease];
str = @"hii";
NSLog(@"%@",str);
有人能帮我解释这段代码吗?如果一个对象被自动释放两次会发生什么?当我运行这段代码时,我没有收到任何僵尸对象的警告。为什么会这样?
NSString
对于某些实例返回单例,例如您创建的空字符串或字符串字面量(您不应该依赖它,但目前是如此!),这些对象不会被释放,这就是为什么没有出现僵尸对象的原因。请注意,保留了NOT标签。首先,没有理由调用两次autorelease。
一旦一个对象被标记为autorelease,再次调用autorelease将被忽略。请参见https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsautoreleasepool_Class/Reference/Reference.html
但是在您发布的示例中,您正在创建一个空字符串:
NSString *str = [[[[NSString alloc]init]autorelease]autorelease];
str = @"hii";
NSString *str =@"hii";
NSLog(@"%@",str);