gpt4 book ai didi

objective-c - 多次调用 'release'?

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

我正在查看其他人的代码并注意到他们在他们不拥有的 NSString 上调用了“release”(从未在任何地方调用过 alloc/retain/copy 并且它不是属性)。

这对我来说看起来有点奇怪,这让我想知道如果您在您不“拥有”或引用计数已经为 0 的对象上调用“释放”是否会发生任何奇怪的行为?下面的代码编译/运行正常,没有警告,所以我猜没有问题,但我只是好奇。

// Releasing an object I don't own
NSString *notMyString = [NSString stringWithString:@"Not mine."];
[notMyString release]; // Ignored?

// Releasing an object I own, twice
NSString *myString = [[NSString alloc] initWithString:@"Mine."];
[myString release]; // Ref count = 0
[myString release]; // Ref count = ?

最佳答案

是的,不要那样做。您的评估是正确的,您对所有权规则的理解也是正确的。向已释放的对象发送消息具有未定义的行为——有时您会很幸运,因为其他事情正在发生,但什么也不会发生。有时你会立即崩溃,有时会因为你损坏了其他东西而稍后崩溃。

关于objective-c - 多次调用 'release'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071225/

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