问题标签 [nszombieenabled]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
104 浏览

ios - iOS 内存管理问题

我知道已经有很多问题与此有关,并且我已尝试关注它们,但我仍然无法弄清楚问题所在。

我已启用 NSZombiesEnabled,但收到错误消息:

如果我在错误后键入bt,我会得到这个堆栈跟踪:

我假设这条线正在解释问题,但我真的不确定:

我想我可能会迷失何时应该释放对象。我尝试在每个使用alloc的方法结束时执行 [object release] ,然后在dealloc方法中我释放了该类的所有属性。

我需要做什么?

0 投票
1 回答
398 浏览

xcode - Xcode - 在两个不同的地方启用僵尸?

我已NSZombieEnabled在方案的参数选项卡中设置启用僵尸()。但我最近才注意到有一个名为“诊断”的选项卡,您可以在其中勾选一个名为“启用僵尸对象”的框。

这两种启用僵尸的方法是等效的吗?

0 投票
5 回答
9168 浏览

iphone - 为什么在使用 ARC + NSZombieEnabled 时对象没有被释放

我将我的应用程序转换为 ARC,并注意到在我的一个视图控制器中分配的对象在该视图控制器被解除分配时没有被解除分配。花了一段时间才弄清楚为什么。我在调试时为我的项目启用了“启用僵尸对象”,结果证明这是原因。考虑以下应用程序逻辑:

1) 用户调用RootViewController导致 aSecondaryViewController被创建和呈现的动作presentModalViewController:animated

2)SecondaryViewController包含ActionsController一个NSObject子类。

3)在初始化时ActionsController观察通知,NSNotificationCenter并在解除分配时停止观察。

4) 用户解散SecondaryViewController返回RootViewController

关闭启用僵尸对象后,上述工作正常,所有对象都被释放。启用 Zombie Objects 后,ActionsController即使SecondaryViewController已解除分配,也不会解除分配。

这导致了我的应用程序 b/cNSNotificationCenter继续向其发送通知的问题ActionsController,由此产生的处理程序导致应用程序崩溃。

我在https://github.com/xjones/XJARCTestApp创建了一个简单的应用程序来说明这一点。查看启用/关闭启用僵尸对象的控制台日志以验证这一点。

问题)

  1. 这是启用僵尸对象的正确行为吗?
  2. 我应该如何实现这种类型的逻辑来消除问题。我想继续使用启用僵尸对象。

编辑#1:根据 Kevin 的建议,我已在http://openradar.appspot.com/10537635将其提交给 Apple 和 openradar 。

编辑#2:澄清一个好的答案

首先,我是一位经验丰富的 iOS 开发人员,我完全了解 ARC、僵尸对象等。如果我遗漏了什么,当然,我很感激任何启发。

其次,对于这种特定崩溃的解决方法确实是在释放actionsController时作为观察者移除。secondaryViewController我还发现,如果我明确设置actionsController = nil何时secondaryViewController解除分配,它将被解除分配。这两种方法都不是很好的解决方法 b/c 它们实际上要求您使用 ARC,但代码就像您没有使用 ARC 一样(例如,在 dealloc 中显式地 nil iVars)。特定的解决方案也无助于确定这在其他控制器中何时会成为问题,因此开发人员可以确定性地知道何时/如何解决此问题。

一个好的答案将解释如何确定性地知道在使用 ARC + NSZombieEnabled 时您需要对一个对象做一些特殊的事情,这样它就可以解决这个特定的例子,并且通常也适用于整个项目,而没有其他类似的可能性问题。

完全有可能不存在一个好的答案,因为这可能是 XCode 中的一个错误。

谢谢大家!

0 投票
2 回答
1025 浏览

ios - NSZombieEnabled 是否应该为已发布的应用程序关闭?

打开后,NSZombieEnabled它将为EXC_BAD_ACCESS运行时发生的问题提供一些保护。

我正在努力确保没有/很少的内存泄漏,但我可能会过度释放,所以NSZombieEnabled打开将有助于防止这种情况,对吗?或者NSZombieEnabled打开后,所有的内存释放操作都会被转换成无操作吗?这将是一个大问题是这样的。

0 投票
1 回答
1521 浏览

ios - 为存档发布版本启用 NSZombieEnabled

当我使用连接的 iPad 运行时,我可以通过“启用僵尸对象”或通过将 NSZombieEnabled 作为环境变量传递来启用 NSZombieEnabled。但是,我似乎无法在启用 NSZombie 的情况下生成构建(即,您归档和分发的那种)。

如何为存档发布版本启用 NSZombieEnabled?

我用来确定它是否从代码中启用的代码是:(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))

0 投票
1 回答
227 浏览

iphone - NSZombieEnabled 阻止应用程序崩溃

我启用了 NSZombieEnabled 并且我的应用程序停止了崩溃。调试器没有输出任何可以帮助我的东西,所以这是我唯一的希望。您对为什么会发生这种情况有任何建议吗?

谢谢。

0 投票
2 回答
974 浏览

ios - 为什么在启用 NSZombie 时我会看到所有这些泄漏?

我的第一个应用程序即将完成,我突然发现该应用程序导致内存泄漏。我发现了一些漏洞并修复了它们。现在没有泄漏,但令我惊讶的是,当启用 NSZombie 时,它​​显示了 4000 多个主要来自框架的泄漏。

我对 NSZombie 的确切使用感到困惑。它仅用于查找僵尸还是以任何方式用于查找泄漏?

这是一个屏幕截图,显示了与框架相关的所有泄漏:

泄漏的屏幕截图

0 投票
1 回答
370 浏览

ios - NSZombie 是否有可能没有用 ARC 指出 EXC_BAD_ACCESS?

我目前正在和一些人一起做一个 ios 项目,我们中的一个人决定在应用程序的一部分中使用 ARC。

不幸的是,我们目前在从后台返回时遇到了一些崩溃。

以下是我们使应用程序崩溃的步骤,我们使用 ios-simulator 执行它们:

  1. 启动应用程序
  2. 获取 ViewController A(使用 ARC 编码)
  3. 上一个 ViewController B(没有用 ARC 编码-老实说我不知道​​它是否相关-)
  4. 将应用程序置于后台。
  5. 模拟内存警告(感谢模拟器)
  6. 再次启动应用程序,我们将在 ViewController B
  7. 回到 Viewcontroller A
  8. 应用程序崩溃指向带有 EXC_BAD_ACCESS 的主函数

我们确实尝试将 NSZombieEnabled 设置为 YES,但是当我们这样做时,应用程序不会崩溃并保持完美运行,所以我们想知道 NSZombieEnabled 是否可能无法与 ARC 一起使用?

如果有人能给我一个关于 ARC 和 NSZombieEnabled 的快速而清晰的见解,我想我知道它是如何工作的,但显然我必须遗漏一些东西。

无论如何,感谢您的帮助和时间。

0 投票
1 回答
103 浏览

objective-c - NSZombieEnabled 是否仅适用于 Objective-C 代码?

在一个 Objective-C 项目中,如果我合并了一些 C 代码,环境变量 NSZombieEnabled 是否可以帮助我调试我用 C 代码完成的意外取消分配的区域,或者它只适用于 Objective-C 部分?

0 投票
1 回答
258 浏览

ios - NSZombieEnabled 没有调试器

我们EXC_BAD_ACCESS的 iOS 应用程序发生了崩溃,但仅在连接了某些外部附件时才会发生。不幸的是,此附件不允许调试(无直通连接)。是否可以永久启用NSZombieEnabled应用程序,以便即使直接在设备上启动应用程序也可以激活它?