双重释放自动释放的对象不会崩溃
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 版本的文档,看看那里是否概述了不同的情况:)以上是关于双重释放自动释放的对象不会崩溃的主要内容,如果未能解决你的问题,请参考以下文章