1

当我将下一个版本的应用程序移近提交到商店时,我使用 Instruments 对其进行了泄漏检查。在我所有的测试设备(iPod touch、iPhone、iPad;不同的操作系统级别等)上,一切都很好,除了运行 iOS 6.1.3 的 iPhone 4S,应用程序在 75% 的时间里崩溃。

设备日志显示出一个共性......这对我来说没有任何意义。

崩溃都是“发送到实例的无法识别的选择器”类型,因此为了限制您滚动的需要,我将删除消息的前面部分,以便您可以更轻松地看到共性。

第一次运行崩溃了:

reason: '-[UIDeviceWhiteColor clean]: unrecognized selector sent to instance 0x1f84db50'

第二轮运行良好。

第三次运行崩溃了:

reason: '-[CALayer clean]: unrecognized selector sent to instance 0x1f87fab0'

第四次运行因这种变化而崩溃:

reason: '-[UIImage clean]: unrecognized selector sent to instance 0x1e56b9d0'

以免您认为我可能会调用一些私有的 Apple API,例如 UIDeviceWhiteColor 对象,我不是。我不知道那是从哪里来的。在崩溃时,应该在此应用程序和该应用程序使用服务发现发现的网络上的另一个应用程序之间创建网络连接。Connection 类实际上有一个 -clean 方法,但是对该方法的唯一调用是在 Connection 类中,它们都是 [self clean] 种类——所以很难看出 -clean 可能是一个无法识别的选择器送给自己。

stackoverflow 建议只有在 Instruments 分析应用程序时才发生某些事情时,可能会出现竞争条件,但我不清楚这将如何应用在这里。

任何人都可以帮助解释我真正看到的与红鲱鱼是什么?

PS 我问 Instruments 是否会破坏内存的原因是因为关于 Objective C 的方法调度表的蜘蛛网内存,并且三个崩溃都引用了奇怪和奇怪的不同对象,就好像调度表被破坏了一样。

PSS 我在第三次和第四次运行之间冷启动了 iPhone 4S。我也退出了 Instruments 和 Xcode 以确保它们没有被扭曲。

4

0 回答 0