【问题标题】:Double releasing an autoreleased object doesn't crash双重释放自动释放的对象不会崩溃
【发布时间】:2011-12-02 09:24:45
【问题描述】:

我正在测试我的代码,我意识到我正在释放一个自动释放的对象,但应用程序没有崩溃。 所以我用几行代码从头开始创建了一个新的空项目:

NSArray *array = [NSArray array];
[array release];
[array release];
[array release];
[array release];
...

这不会永远崩溃,也不会在 GDB 中被标记为僵尸对象。如果我用 Product 分析代码 -> 分析它不会发现任何错误。

我认为通常它应该崩溃...... 我正在使用 Apple LLVM 编译器 3.0 在 Xcode 4.2 上进行测试,但旧的 gcc 4.2 也是如此。

知道为什么会这样吗?

谢谢

【问题讨论】:

  • 我认为您运行的构建设置与我不同。您使用的是什么编译器和 Xcode 版本?

标签: objective-c crash autorelease


【解决方案1】:

如果启用了垃圾收集,这将是一个空操作。我想是的。

【讨论】:

  • 是的,你是对的。我来自没有垃圾收集的旧内存模型,所以我期待看到崩溃。
  • 我也是这样,而且对 Objective-c 没有经验,我直接去查找 NSObject 版本的文档,看看那里是否概述了不同的情况:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
相关资源
最近更新 更多