双重释放自动释放的对象不会崩溃

Posted

技术标签:

【中文标题】双重释放自动释放的对象不会崩溃【英文标题】: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 版本? 【参考方案1】:

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

【讨论】:

是的,你是对的。我来自没有垃圾收集的旧内存模型,所以我期待看到崩溃。 我也是这样,而且对 Objective-c 没有经验,我直接去查找 NSObject 版本的文档,看看那里是否概述了不同的情况:)

以上是关于双重释放自动释放的对象不会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

释放自动释放字符串对象不会崩溃

如何使用 Xcode 检测对象的双重释放?

ARC奇怪的双重释放?

设置条件以避免双重释放分配的内存

NSURLRequest 自动释放:崩溃

如何找到带有自动释放消息的对象?