多次调用'发布'?

时间:2010-06-18 16:02:46

标签: objective-c memory-management

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

对我来说这看起来有点奇怪,如果你对一个你不“拥有”或者其引用数已经为0的对象调用'release',我会想知道是否会出现任何奇怪的行为?下面的代码编译/运行没有警告,所以我猜测没有问题,但我只是好奇。

// 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 = ?

1 个答案:

答案 0 :(得分:15)

是的,不要那样做。您的评估是正确的,您对所有权规则的理解也是正确的。向已发布的对象发送消息具有未定义的行为 - 有时您会因为其他事情发生而变得幸运,并且不会发生任何事情。有时候你会立即崩溃,有时甚至会因为你已经损坏其他东西而崩溃。