首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当下面的代码执行时会发生什么?Ball *ball =[Ball alloc] init] autorelease] autorelease];

当下面的代码执行时会发生什么?Ball *ball =[Ball alloc] init] autorelease] autorelease];
EN

Stack Overflow用户
提问于 2011-04-19 11:42:58
回答 3查看 3.8K关注 0票数 10

当下面的代码执行时会发生什么?

代码语言:javascript
复制
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];
EN

回答 3

Stack Overflow用户

发布于 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是我们需要平衡的唯一所有权声明,所以球现在会被释放太多次。这可能会以任何方式表现出来,但它可能会崩溃。

票数 27
EN

Stack Overflow用户

发布于 2011-04-19 12:06:26

简短的回答:A崩溃随之而来。

票数 1
EN

Stack Overflow用户

发布于 2011-04-19 11:47:57

一旦你给了object autorelease调用,现在你已经把它的发布责任交给了autorelease pool,现在就像你不拥有它一样。它将显示随机行为,它可能崩溃,有时不崩溃。(取决于自动租约池何时释放它,如果它释放,那么它将崩溃)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5711360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档