【问题标题】:Is it true NSZombies can cause a crash?NSZombies 真的会导致崩溃吗?
【发布时间】:2014-03-20 15:38:41
【问题描述】:

我在这里读到启用 ARC 的 NSZombies 实际上会导致崩溃,我还读到它不会导致崩溃。人们说它可能会因未在对象上调用 dealloc 的错误而导致崩溃。这是真的吗?现在仍然如此吗?我意识到它可能会因内存不足而崩溃,但这是唯一一次可能因启用僵尸而导致崩溃吗?

我正在查看的帖子是:NSZombie crashing app when enabled on the iPhone

【问题讨论】:

  • 你想知道其他问题还没有告诉你什么?
  • 好吧,当您已经在寻找崩溃的原因时,您通常只会启用僵尸...所以您认为僵尸在您正在寻找的崩溃之前导致崩溃吗?它可能只是捕捉到一个可能会崩溃的问题......就像一个指针被分配给另一个对象,该对象恰好响应您发送它的选择器......比如-description -length,-intValue,一些常见的东西可能

标签: ios objective-c automatic-ref-counting nszombies


【解决方案1】:

不清楚你在问什么。

NSZombies 是指在您的项目中将 NSZombies 标志设置为 true 吗?是的,这会导致你的程序内存永远增长,你最终会耗尽内存并崩溃。 (启用僵尸后,运行时不会在 dealloc 上释放对象,而是将它们标记为僵尸并保留其内存在使用中。)

如果你的意思是在你的程序中可以有僵尸(对象被释放,但你的代码试图向它们发送消息),那么是的,这会并且经常会导致崩溃。僵尸在 ARC 下不太常见,但仍有可能。

【讨论】:

  • 是的,我的意思不是“如果你的意思是在你的程序中可以有僵尸(对象被释放但你的代码试图向它们发送消息)”。但崩溃的根本原因不会是因为启用了 NSZombies,对吧?这意味着关闭 NSZombies 不会阻止崩溃。
  • @SukyaMaki 你混淆了 zombiesNSZombieEnabled 调试机制。 “僵尸”只是在释放后发送消息的普通对象。您无法关闭它们。
【解决方案2】:

设置NSZombieEnabled 本身不会导致崩溃。

当然,您的应用程序中一些其他隐藏的错误可能会显示为内存使用变化的副作用。

人们说它可能会因未在对象上调用 dealloc 的错误而导致崩溃。

事实并非如此。启用僵尸检测不会阻止调用dealloc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2018-02-24
    • 2020-06-21
    • 1970-01-01
    相关资源
    最近更新 更多