执行下面的代码会发生什么?
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];
最佳答案
让我们分解一下:
[Ball alloc]
:这会创建一个我们拥有的 Ball 对象(因此需要释放)。
[[Ball alloc] init]
:这会初始化我们刚刚创建的 Ball 对象。
[[[Ball alloc] init] autorelease]
:这会将 Ball 添加到当前的自动释放池中,因此它将在该池耗尽时释放。这是正确的做法,例如,如果我们要从方法中返回 Ball。
[[[[Ball alloc] init] autorelease] autorelease]
:这会再次自动释放 Ball 对象。这是 100% 错误的。 alloc
是我们需要平衡的唯一所有权声明,因此 Ball 现在将被释放太多次。这可能会以多种方式表现出来,但它可能只会崩溃。
关于iphone - 下面的代码执行时会发生什么? Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5711360/