gpt4 book ai didi

objective-c - 为什么我的对象在无数次发布后仍然有效?

转载 作者:太空狗 更新时间:2023-10-30 03:56:37 25 4
gpt4 key购买 nike

我似乎永远无法取消分配我的 NSMutableString ,如下所示。最初的retain count应该是1,但是释放了几次之后,这个字符串还像什么都没发生过一样可用!

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here...
NSMutableString* s = [[NSString alloc]initWithString:@"AAA"];
[s release];
[s release];
[s release];
[s release];
[s release];

NSLog(@"%@",s);

[pool drain];
return 0;
}

当然,如果我使用 Analyze,它仍然告诉我我在第二个 release 上释放了一个已释放的对象。

最佳答案

Scott 的回答是正确的,但在这种特殊情况下,原因是 NSString 文字(即 @"")是唯一的编译时常量,在保留和释放时实际上根本不做任何事情。您将其分配给 NSMutableString* 实际上并没有使它成为 NSMutableString,因此您所写的内容等同于

[@"AAA" release];
[@"AAA" release];
[@"AAA" release];
[@"AAA" release];
[@"AAA" release];
[@"AAA" release];

关于objective-c - 为什么我的对象在无数次发布后仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6646947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com