问题标签 [nszombies]

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 投票
2 回答
103 浏览

ios - NSZombies 真的会导致崩溃吗?

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

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

0 投票
1 回答
151 浏览

ios - UITapGestureRecognizer 导致崩溃并显示不同的错误消息

我在工作中遇到了一个重大问题,非常感谢一些帮助。这已经花了我 2 天的时间。

我想要做的是有一个特殊的图像类触发它被触摸时分配回调。而已。

但是当我触摸图像时它崩溃了,通常没有错误消息(lldb)。有时它会说垃圾之类的"[__NSCFData tapped:]: unrecognized selector sent to instance 0x1780af360"。有时它说"message sent to deallocated object"

我可以连续运行该应用程序 10 次,只需每次点击屏幕上的同一个对象即可获得其中一条随机消息。

代码非常简单:

这是里面的代码K_PreviewImage(我的可点击图片)。这不会从任何东西继承,包括 NSObject

上面的代码在 100% 的情况下都会导致崩溃。

如果我也添加@objc,则K_PreviewImage像这样的点击事件侦听器

然后代码工作并触发触摸事件(内部K_PreviewImage和控制器回调函数'nestedTap'。

不知道为什么会这样,但确实如此。但是我仍然没有桨,因为当我创建K_PreviewImage一个函数变量而不是类成员变量时,我再次崩溃了

所以我的第一个问题是为什么我需要添加@objc以触发回调而不是给我一个不清楚的“释放”内存崩溃?

我的第二个问题是为什么当我将变量从成员变量移动到函数变量时会再次导致崩溃。如果对象被释放,它一开始就听不到点击事件,可以吗?为什么还会出现在荧幕上?为什么它只是因为它不是成员变量而被解除分配!

我怎么能动态地创建一个自定义对象并让它触发点击事件!

更新

这是完整的代码块,涉及如何使用触摸事件添加我的 K_PreviewImage

解决了:

因为即使添加了子视图,我也没有存储对 K_PreviewImage 'k' 的引用,即使它属于 k,k 也没有被保留。通过使数组存储对 K_PreviewImage 而不是 iImage 的引用,编译器现在保留对 K_Preview Image 的引用

0 投票
0 回答
564 浏览

ios - 消息发送到方法 dequeuereusablecellwithidentifier 上的 Deallocated 实例

我在加载 UITableView 时收到以下错误:

我使用 NSZombies 来追踪错误到该行:

先前已声明 CellIdentifier 的位置:

我已经包含了来自仪器的图像。任何帮助是极大的赞赏!

在此处输入图像描述

日志输出:

0 投票
0 回答
557 浏览

ios - 分配跟踪库未及时加载 - 不适用于 ios 7

我正在尝试使用 ios 7.1 模拟器运行僵尸仪器,但收到错误“分配跟踪库未及时加载”。当我尝试使用 ios 8.3 模拟器运行僵尸时,它可以工作。我正在使用 xcode 6.3.1,并且在 Scheme 中启用了僵尸。有谁知道可能是什么问题?

0 投票
2 回答
462 浏览

objective-c - 有意向已释放对象发送消息的 Objective-c 示例代码

我是Objective-cxcode的新手,我目前正在编写的应用程序收到了臭名昭著的EXC_BAD_ACCESS错误。

几乎每个人都建议开始使用NSZombies来解决问题。我想我有 NSZombies 工作,但是当我的应用程序崩溃时, xcode没有给我一个关于僵尸消息的警报。

在继续调试之前,我想运行一些代码,这些代码肯定会导致将消息发送到僵尸(解除分配的对象)。

什么是一个简单的代码片段,其中一条消息被发送到一个已释放的对象,导致NSZombies应该提醒我的场景?

0 投票
1 回答
788 浏览

html - 如何让我的图像覆盖背景 html?

我想让我的图像成为封面背景,但这对我不起作用。这是我的代码:

0 投票
0 回答
284 浏览

ios - 正确管理内存以防止释放 'CFString (immutable)' 对象(僵尸)

我有一种情况,我在辅助类的实例中复制了一个字符串,保留它,然后在dealloc分配辅助类的视图控制器实例期间释放它。这会导致可怕的 EXC_BAD_ACCESS。然后我去 Instruments 调试僵尸。这给了我以下错误:

一条 Objective-C 消息被发送到地址为:blah blah 的已释放 'CFString (immutable)' 对象(僵尸)

然后,当我查看 Instruments 中的分配摘要并从僵尸检测向后工作时,我的代码第一次被列出是在帮助程序类实例的释放中。这是助手类的样子。首先是 .h 文件:

然后是 .m 文件:

现在,视图控制器中使用辅助类的相关代码如下所示。在 .h 文件中,我有一个数组,它将保存辅助类的多个对象,如下所示:

然后在 .m 代码中,我合成channelTitles. 我还有一个dealloc方法如下:

最后,我分配帮助类的对象实例,并将它们channelTitles与存储在channelTitle元素中的字符串一起存储,channelButtonTitles如下所示:

所以,这是我以前用过很多次的技巧,但现在似乎不太高兴。当视图控制器被弹出并返回根视图控制器时,dealloc我的视图控制器中的方法被调用。该版本channelTitles会导致调用存储dealloc在.channelButtonTitleschannelTitles

由于我在我的助手类的属性中使用了副本,我假设我拥有这个字符串。因此,我正在发布它。如果我从我的 中注释掉该[channelTitle release]dealloc,EXC_BAD_ACCESS 就会消失,但我怀疑我现在有内存泄漏。请帮我看看我做错了什么。

0 投票
1 回答
42 浏览

ios - 如何修复发送到已释放错误的消息

当我弹出到父控制器时,我正在使用委托将两个字符串传递给父控制器。

我启用了 Zombies 并收到如下错误:

[CFString respondsToSelector:]: message sent to deallocated instance 0x7a77f8e0.

任何人都可以帮忙吗?

0 投票
1 回答
749 浏览

swift - 以下代码中出现僵尸的原因是什么

我有以下用于收集设备运动数据的类:

但是,在它运行一段时间后,我得到了 EXC_BAD_ACCESS。我运行了僵尸仪器,看来这handleMotionUpdate()是调用者的错误。MotionDataRecord或者它的一些属性正在以某种方式被释放......

MotionDataRecord是一个struct

有什么想法吗?

编辑:

已在此处将项目的精简版本添加到 github

编辑:

僵尸仪器截图:

僵尸仪器截图

0 投票
1 回答
292 浏览

ios - ARC 中的系统对象委托是否需要设置为零?

应用程序有时会因错误而崩溃objc_object::release()

苹果开发者技术支持提到了这一点:

请记住,您应该始终执行 _tableView.delegate = nil; 之类的操作。在您的 -dealloc 方法中,即使您使用的是 ARC。出于兼容性原因,系统对象使用unsafe_unretained 引用来实现委托,而不是首选的现代替换weak

这是否意味着当视图控制器即将被释放时,我必须将系统对象的代表设置为零?

我总是假设UITableView和类似的标准对象正在使用weak对其代表的引用?


更新:

技术支持的示例似乎已过时,因为UITableView已更新给weak代表。但是,并非所有代表都已更新,例如AVAudioPlayer.delegateis still unowned(unsafe)。看来,Apple 正在逐渐将代表更新为weak.

因此,可以通过检查 Xcode 中的委托声明来简单地确定委托是否已手动设置为 nil。如果是weak,请不要打扰。