当下面的代码执行时会发生什么?
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];发布于 2011-04-19 11:48:36
让我们来分析一下:
[Ball alloc]:这将创建一个我们拥有的Ball对象(因此需要释放)。
[[Ball alloc] init]:这将初始化我们刚刚创建的Ball对象。
[[[Ball alloc] init] autorelease]:这会将球添加到当前的自动释放池中,因此当该池被排空时,它将被释放。例如,如果我们要从一个方法返回Ball,那么这样做是正确的。
[[[[Ball alloc] init] autorelease] autorelease]:这将再次自动释放球对象。这是100%错误的。alloc是我们需要平衡的唯一所有权声明,所以球现在会被释放太多次。这可能会以任何方式表现出来,但它可能会崩溃。
发布于 2011-04-19 12:06:26
简短的回答:A崩溃随之而来。
发布于 2011-04-19 11:47:57
一旦你给了object autorelease调用,现在你已经把它的发布责任交给了autorelease pool,现在就像你不拥有它一样。它将显示随机行为,它可能崩溃,有时不崩溃。(取决于自动租约池何时释放它,如果它释放,那么它将崩溃)
https://stackoverflow.com/questions/5711360
复制相似问题