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

标签 iphone objective-c

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

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/

相关文章:

iphone - 在用户看到推送通知消息之前检查用户位置?

iphone - 在大数组中搜索字符串需要很长时间

ios - 如何从 NSMutableAttributedString 中删除文本

iphone - 如何使用谷歌驱动器在 ios 应用程序中获取视频和音频文件

objective-c - 如何将音频数据存储到文档目录中?

iphone - 实现一个水平的UIRefreshControl

iphone - 如何将 UISplitViewController 添加到 UINavigationController?

iphone - 直接编写使用 Foundation 类型的 C 代码吗?

iPhone Lite 版本 - 允许什么?

objective-c - 使用 NSUserDefaults 保存从 NSPopupbutton 中选择的项目