问题标签 [nszombie]

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 投票
0 回答
671 浏览

objective-c - ARC 与僵尸 - 为什么实例变量中的对象在释放拥有对象时不会被释放?

可能重复:
为什么在使用 ARC + NSZombieEnabled 时对象未解除分配

在使用 ARC 并启用僵尸对象的项目中,如果一个对象在释放时持有对另一个对象的强引用,则该对象不会被释放。

这段代码演示了这个问题:

分配和释放 TestOuter 实例会产生以下日志消息:

TestInner 实例永远不会被释放。然而,关闭僵尸会导致 TestInner 实例被释放。

切换到 ARC 的好处之一是我们很少需要实现一个 dealloc 方法来简单地释放持有的对象引用。似乎启用了僵尸,这有助于在开发过程中捕捉各种错误,但这种好处无法实现。我仍然需要实现 dealloc 方法只是为了将我持有的引用设置为nil.

我在这里遗漏了什么,或者这真的是 ARC 与僵尸混合时的预期行为吗?

0 投票
2 回答
119 浏览

iphone - 无法识别的选择器发送到实例 - 我没有命名选择器

是的,还有一个,但这一个没有意义。它声称:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIRoundedRectButton astroidImage]:无法识别的选择器发送到实例 0x15a2a0”

它发生在应用程序的确切启动时,奇怪的是,这个应用程序昨天运行良好,但是当我今天早上尝试时,它就糟了。有趣的是,我没有设置 UIRoundedRect 来调用名为 astroidImage 的方法,因为 astroidImage 是另一个类中的属性。那么这里到底发生了什么?

0 投票
2 回答
392 浏览

iphone - 有时会在没有消息的情况下崩溃 EXC_BAD_ACCESS(设置 NSZombieEnabled)

我正在处理 RemoteIO 以获取麦克风输入并对其进行少量修改。

有时它会崩溃EXC_BAD_ACCESS并且没有更多消息。

导致崩溃的行是这些;

解释代码,

  1. “权力”是NSMutableArray
  2. [powers count]总是大于变量“i”

挣扎了一会儿,我找到了一个很好的方法来解决它。

一个环境变量。

所以我设置了NSZombieEnabled,也NSDebugEnabled让我可以看到崩溃的原因。

但即使我设置了变量,Xcode 也没有显示任何消息。(但当其他线路发生崩溃时,它会正确显示消息。)

还有一个奇怪的事情是它不会在运行开始后立即崩溃;它平均在一分钟内崩溃。(但时代真的不同。)

这是一个小小的猜测。当我将速率降低到比以前的一半时,它更加稳定。

那么,是否有问题NSMutableArray,因为NSMutableArray方法无法赶上速度?

还是您看到其他可能的原因?

==================================================== ========================================

还有一些代码。我是这样分配权力的。。

我释放权力阵列的地方是..

没有别的地方。

更详细的代码是这样的。

此 drawRect: 方法每毫秒从主线程(按计时器)调用。

-- 在这个方法中更新(更具体地说是添加)权力

而且这个方法每毫秒调用一次。这是在后台线程中调用。

所以没有@autoreleasepool XCode 显示泄漏警报消息

出于这个原因,我用 @autoreleasepool{..} 阻止了方法(setPower)

0 投票
1 回答
123 浏览

objective-c - UITableViewController 僵尸滚动

星期五快乐。有一个有趣的时间调试一个僵尸问题。我有一个从加载的对象UITableView中获取其数据源的方法。(见下面的课程)。当应用程序加载时,一切都很好 - 第一个 8 或 9 个单词按预期显示在表格视图中。但是,当我滚动时,我的对象中出现了僵尸,正如调试器输出“<Zombie>”作为类实例变量值的值所证明的那样。(见截图)。这会导致崩溃。NSMutableArrayWordWordWord

显示僵尸的屏幕截图

这是Word类

我确信这是愚蠢的,但我看不出我哪里出错了。

我在 Instruments 上运行了“Analyze”,没有报告任何问题。崩溃后,我运行了“malloc_history 12440 0x6b1fe70”并查看了输出,但不知道要查找什么,除了具有僵尸的对象的类名,我没有看到。

非常感谢任何跟踪此问题的帮助。

谢谢!

0 投票
2 回答
366 浏览

objective-c - NSZombies 启用,调试信息

我的 Mac 应用程序因运行循环上的 exc_bad_access 而崩溃。所以我启用了 NSZombies,现在我没有看到预期的这样的错误(因为对象没有被取消分配)。

但是,我在控制台中找不到任何有用的 NSZombie Log。有没有办法确定问题?

0 投票
1 回答
436 浏览

ios - ios5 设备上的 NSZombie 解决发送到已释放实例的消息

如果程序在模拟器上,似乎只能在仪器中启用 NSZombie。我在 Xcode 上做了 NSZombie,它告诉我发送到已释放实例的这条消息发生在我的视频拍摄类中,模拟器不支持该类。因此我无法追踪已被释放的实例......

当我必须使用设备来实现它时,有什么想法可以让我找出哪个实例正在被释放?我正在使用带有 ARC 的 iOS5 ..

非常感谢你。

0 投票
0 回答
249 浏览

ios - 在 iOS 5 开发中使用 -Os 和自动引用计数创建的 NSZombie

我花了一天的时间在我的 iOS 5 iPad 应用程序中处理一个奇怪的错误,我想知道是否有人知道一些信息。

这是一般设置:有一个 UIViewController 子类 StoryViewChildController,它有两个成员变量:_currentModel_comingModel. StoryViewChildController 中有一个方法调用[[INEWSStoryModel alloc] init]并返回创建的结果对象。期间viewDidLoad,我有以下代码块。请注意,这不是从代码中逐字复制的——它更复杂——但我试图总结一下:

然后,在某些时候,我需要能够交换 _currentModel 和 _comingModel 以及其他对象。这是我的代码中逐字逐句的交换方法:

问题是:当我在 Release 配置(使用 -Os 进行编译器优化)中运行我的项目时,我在交换模型对象期间崩溃。崩溃来自尝试访问 Zombie 对象。我使用 Instruments 来追踪我的对象的保留/释放路径,并且进入这个方法,_currentModel 的引用计数为 1,正如预期的那样。但是,该行INEWSStoryModel *swapModel = _currentModel;不会导致在 _currentModel 上调用保留,因此下一次调用_currentModel = _comingModel;会导致引用计数下降到 0。然后,当swapModel超出范围时,会尝试另一个释放调用,并且程序崩溃。

在我看来,编译器优化似乎正在优化它不应该的保留调用。有没有其他人遇到过这种类型的问题?我可能做错了什么吗?如有必要,我可以从课堂上发布更多代码。

其他有趣的注意事项:如果我将 swapModel 变量设置为 __autoreleasing,则代码有效。另外,如果我在 swap 方法的末尾添加以下代码块,则代码可以工作:

该方法所做的只是调整 UIView 框架。我可以在方法的末尾添加不相关的代码并且让它不会创建僵尸,这一事实让我认为编译器优化不正确。有人有想法么?

0 投票
3 回答
776 浏览

objective-c - 在运行时检测僵尸

有没有办法在objective-c中在运行时找到僵尸?
我正在寻找一种方法来防止对象调用僵尸上的方法,有没有办法在不使应用程序崩溃的情况下检测到一个方法?
我确实知道 ARC iOS5 下的弱引用和常识编程实践。
我在想一种方法可能是询问对象的大小(我知道可能“内部”只有引用)但是如果对象仍然存在,它应该给出一个值,如果它可能不仅仅是单个指针大小。
使用malloc_size(pointerToObject)
它可以工作吗?

更新:我知道如何运行 Instruments for Zombies detection

0 投票
2 回答
723 浏览

objective-c - 什么时候变量是僵尸?

我想检查一个变量什么时候是僵尸,当它不是时,我有这样的功能,如果它真的存在,你必须从超级层中删除,有时它已经被删除了,但是作为一个僵尸,它正在崩溃在这一点上。我应该怎么做才能在运行时检查变量是否是僵尸?

我有这个代码来创建它:

我应该做这样的事情吗?

有什么帮助吗?先感谢您!

0 投票
1 回答
309 浏览

iphone - 混合 ARC 代码中的僵尸

我在启用 ARC 的应用程序中使用非 ARC 框架。现在我EXC_BAD_ACCESS在一条看起来像这样的线路上感到奇怪:

首先,这怎么可能,因为super不是一个可能被释放的对象。更新:虽然调试器卡在这一行,但事实证明问题在上述方法中更深一层。

当我在僵尸模式下运行这个东西时,我得到以下“僵尸堆栈”:

似乎 url 有问题,但在 ARC 中,我无法保留 URL,因此它不会被分配。那么我该如何解决这个问题。