问题标签 [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 投票
2 回答
12050 浏览

objective-c - iOS libsystem_c.dylib strdup 内存泄漏 NSZombie 不工作

请帮助我追踪 iOS 内存泄漏。谢谢!

我正在使用 xCode 4.0.1 并尝试激活 NSZombie 以跟踪内存泄漏,但它似乎不像以前那样工作,使用 xCode 3.x

正如 Instruments 指出的那样,我无法找出内存泄漏的来源:

泄漏对象 -> GeneralBlock-32 地址 -> 0x4c8600 大小 -> 32 字节 负责库 -> libsystem_c.dylib 负责框架/调用者 -> strup

在这一点上,我不知道我是否在 xCode 4 中以正确的方式使用带有 NSZombie 的Instruments ,因为当我在左侧选项Leaks下单击“i”以获取更多信息时,它不会显示 NSZombie 选项。

观察:我的 iPhone 应用程序在有限的时间内播放实时流 mms/wma 和 wma áudio 文件。泄漏发生在有限的 wma 文件中,但当我从流式源播放时运行完美,没有结束时间。

0 投票
3 回答
1305 浏览

objective-c - 块捕获对象的过度释放问题;保留计数直接从 +2 跳到 0!

我对我看到的偶尔崩溃感到困惑,根据 Zombies 工具,这是由某些字典值的过度释放引起的。当我查看 Instruments 中这些过度释放对象之一的对象历史记录时,我发现它的保留计数在某个阶段直接从 +2 下降到 0。(请看帖子末尾的屏幕截图)。我不清楚这怎么可能。

我应该说我只在使用 Instruments 进行分析时才看到这个崩溃,所以我想这可能是一个 Apple 错误,但假设它是 Pilot 错误可能更安全,而 Instruments 只是暴露了这个错误。

无论如何,我正在构建一个包含一些核心基础对象(CFStrings 和 CFNumbers)的 CFDictionary,然后我将其转换为 NSDictionary* 并将其传递给 Objective-C 方法。我的代码的简化版本如下:

我曾认为str1,str2num1将被视为 Objective-C 对象,因此会-receiveDictionary:在调用复制块 in 时被捕获并自动保留dispatch_async,并在释放该块时释放。实际上,这些变量似乎确实被块捕获和保留。但是,检查 Instruments 中过度释放的 CFString 的对象历史记录,我可以看到在复制块时它的引用计数正在增加。令人困惑的是,当一个块被释放时,它的保留计数从 +2 直接下降到 0(见帖子末尾的截图);我不知道如何从堆栈跟踪中判断这是哪个块。到时候CFRelease在块中的字典上调用doStuff(),它的一些值已经被释放,程序崩溃了。

那么额外的发布调用是从哪里来的呢?正如 Instruments 所指出的,一个对象的保留计数如何从 +2 直接下降到 0?

一时兴起,我强迫第二个块保留整个字典,如下所示:

这似乎使崩溃消失了;仪器至少停止报告僵尸。不过,我终其一生都无法理解为什么会这样。当然,我只是为了确保该块保留我感兴趣的字典值,而不是整个字典。发生什么了?


Instruments 列出了僵尸 CFString 的以下对象历史记录,以及对象的保留计数。我已经包含了有趣事件的屏幕截图。

#0 +1 CFString 已创建
#1 +2 CFString 添加到字典
#2 +1 CFString 已释放
#3 +2 CFString 在-receiveDictionary:复制
块时保留 #4 +0什么...?对象的保留计数从 +2 直接下降到 0!
#5 -1 CFDictionary 被释放,导致崩溃

0 投票
1 回答
400 浏览

ios - iOS 上的 NSZombie 不在模拟器中

我有一个错误,我在 Autorelease 功能中崩溃。经典:过度释放后访问对象。

问题是 iOS 程序正在使用 EAAccessory 并且由于从设备接收到数据而在某处发生。

因此,需要通过模拟器诊断问题。由于 NSZombie 的内存要求,NSZombie 在模拟器之外的 iOS 中被禁用。

任何提示/想法如何在模拟器之外的 iOS 世界中使用 NSZombie 轻松追踪过度发布的错误?

我已经考虑过尝试为模拟器存根 EAAcessory 的行为;但由于时间限制,由于所需的工作量更多,更多的是“下一次 rev-refactor/enhancement”。

现在我只需要找到错误的访问错误。

0 投票
1 回答
778 浏览

objective-c - 目标 C:在哪里可以找到在gdb中?

我正在尝试使用 NSZombie 调试我的程序。调试器确实向我返回了有问题的实例的地址,但是我不确定从哪里获取运行命令“shell malloc_history”所需的 pid

谁能告诉我在这种情况下使用的正确 pid 是什么?我试过 3298 和 3298:707 都没有用。感谢这里的任何帮助。

振和

0 投票
2 回答
2051 浏览

iphone - NSManagedObject 发布

我的应用程序的一部分基于 Apple 的 CoreDataRecipes 示例代码,可在

http://developer.apple.com/library/ios/#samplecode/iPhoneCoreDataRecipes/Introduction/Intro.html

经过一些修改后,我花了好几个小时追踪一个我必须引入的错误,但我通过删除苹果代码中存在的两行代码解决了这个问题。

我在 NSManagedDataObject 配方中添加了一个作者属性,在实现上相同 - 据我所知 - 到配方已经具有的其他字符串属性。我的新属性在进入和离开由 IngredientDetailViewController 控制的模态视图后变成了僵尸。IngredientDetailViewController 的 dealloc 方法是

找到错误后,我注释掉了配方和成分(另一个 NSManagedObject)的版本,我的应用程序现在似乎正在运行。我现在发现我的代码在有或没有这些发布调用的情况下都可以工作;该错误必须已通过我所做的另一项更改修复。我现在想知道

  1. 为什么苹果的示例代码最初是这样写的?
  2. NSManagedObject 配方的原始属性是什么,这意味着它们不容易受到 dealloc 调用的僵尸化?

如果以上内容还不足以表明我的无知,我应该指出我是 Objective C 和 iPhone 开发的新手,但我真的很想了解这里发生了什么。

针对评论进行编辑并更新:

我现在无法通过取消注释这些行来复制僵尸创建,显然在错误排除期间的另一个更改起到了作用。我最初询问的一些内容现在无效,但这让我对 NSManagedObjects 的 release 使用更加困惑,因为现在无论是否有这些调用,功能似乎都相同。我现在的主要问题是他们是否应该在那里。保存在成分详细信息视图中时发生崩溃。这是标题:

和保存方法:

由于我是新用户,数据模型的截图不能放在这里,所以这里有一个链接:数据模型截图

最后是配方标题:

再次感谢。

0 投票
2 回答
2342 浏览

objective-c - 目标 C:如何判断一个对象现在是否是 NSZombie

我已经NSZombieEnabled=YES设置好了,我想做下面的代码

事实证明,什么时候udid“发布”,它已经被僵尸取代,它不是nil。所以我想做类似的事情

我试过了[udid isKindOf:[NSZombie Class]],但NSZombie不存在。那么我怎么知道这个udid物体现在是僵尸呢?

0 投票
1 回答
109 浏览

objective-c - EXC_BAD_ACCESS 虽然对象没有被释放?

我的代码中有以下问题:

所有这四个视图控制器都在 .h 文件中正确定义并手动合成(是的,所有这些都完全相同,我仔细检查了):

}

现在,发生了一些奇怪的事情:如果case 0:调用了 ,controller则变为self.kundenTableViewController。然后我EXC_BAD_ACCESS在最后一行得到一个,视图控制器被推入堆栈。这只发生在这个特定的控制器上,不会发生在其他控制器上。我尝试了 NSZombies 并通过 NSLog 检查控制器是否正确初始化,但一切似乎都很好。有任何想法吗?

更新:这是四个控制器的代码:

}

}

}

}

我只是无法弄清楚为什么它只发生在第一个。

0 投票
1 回答
113 浏览

objective-c - 添加分发配置文件后,NSZombie 停止工作

我使用 NSZombie 很好地调试了我的项目,但现在当我运行 Profiler 时它根本无法显示任何内容。我所做的唯一似乎会影响这一点的更改是添加了 ad-hc 配置文件。

NSZombie 环境变量仍然为 Run 方案启用,并且 Profile 方案也显示它,因为 Profile 方案设置为“使用运行操作的选项”。

但是当我在 XCode 4 中选择 Allocations Profile Instrument 时,它没有提供关于我的 NSZombie 行为的报告。我什至故意添加了这些行:

这应该会创建一个 NSZombie,但没有像以前那样的 Instruments 报告。

有人有想法么?

0 投票
3 回答
3251 浏览

ios - 如何在 Lion 下的 Xcode 4.1 Instruments 中启用 NSZombie?

这仅适用于新的 Xcode 4.1,特别是在 Lion 上运行。如何在 Instruments 中启用 NSZombie?它不再像 Xcode 4.0 那样位于启动配置下 (i) 图标的分配中。也没有名为 Zombies 的库条目。

当然问题是我不能回退到 Xcode 4.0,因为它拒绝在 Lion 下运行,所以我陷入了困境!任何其他使用 Lion 的前沿开发人员,比我有更多经验,可以帮助解决这个问题吗?谢谢。-里克

0 投票
3 回答
891 浏览

iphone - ASIHTTPRequest 和僵尸...

已解决(我认为):在弹出 vc 后(在 dealloc 中)将 ASIHTTPRequest 委托/NSOperationQueue 委托设置为 nil。

在我开始之前,这个问题是相似的,但又不一样。

我的应用程序即将发布,但这是整个开发过程中唯一存在的持久性错误。这也是向某人演示应用程序时出现的唯一错误,并且由于此错误导致应用程序终止,因此非常尴尬。如果有人能找到解决这个问题(永远),我将奖励一个体面的赏金。


问题开始:

基本上,当 ASIHTTPRequest 尝试将requestFinished选择器调用到一个僵尸对象上时,就会发生此错误。

环顾四周,似乎 ASIHTTPRequest 在面对将选择器发送给僵尸时,会将其发送给不是僵尸的类似对象。我听说将选择器发送到它要发送到的控制器的 CALayer 是很常见的,而且我也将它发送到我的 UINavigationButton!?- 无论如何,这样做的效果是它抛出了一个异常。

当 ASIHTTPRequest 类尝试调用“requestFinished”选择器时,会出现问题:

那行代码是它失败的那一行 - 令我困惑的是为什么?在我链接到的问题上,OP 说他们通过[self retain]从视图控制器调用来修复它。这肯定不对吧?

结构

我的 ASIHTTPRequest 的工作方式是将它们添加到位于我的应用程序委托中的下载队列 (NSOperationQueue)。我的应用程序的结构/样式主要基于此示例代码,它做了非常相似的事情,但使用了 flickr RSS 提要。

我的应用程序中使用 ASIHTTPRequest 的部分是一个网络摄像头查看器。它有一个带有表格视图的导航控制器,其中显示三个网络摄像头。这些图像是 JPEG,每 30 秒更新为静态文件(在远程服务器上)。此表视图中的单元格是自定义的,每个单元格都加载自己的 ASIHTTPRequest。单元格下载它们各自的图像,并显示它们。

这是我创建的在每个单元格上调用的方法:

When one of these cells is selected, it takes the user to a detail view, where another instance of ASIHTTPRequest is loaded, which downloads the image for the selected webcam.

错误是如何触发的

在我的应用程序的正常“平静”使用下,它表现良好。当这些视图之间(根和详细网络摄像头视图之间)发生快速推送和弹出时,就会出现问题。如果您进入详细视图,进度条开始移动,并且您再次弹出到根目录,则通常会发生这种情况。这让我相信,由于控制器未处于活动状态,因此当 ASIHTTPRequest 完成并尝试调用控制器时,它会失败。

崩溃日志


  • 谢谢你读到这里!
  • 如果您回答,则更感谢
  • 如果你解决我的问题,赏金:)