当我将我的应用程序的下一个版本移近提交到商店时,我使用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建议race conditions可能正在发挥作用,当一些事情发生时,仪器正在分析应用程序,但我不清楚这将如何适用于此。
任何人都可以帮助解释我真正看到的与红色鲱鱼有什么关系吗?
P.S。我之所以询问Instruments是否会破坏内存的原因是因为有关Objective C的方法调度表的蜘蛛网记忆,以及三个崩溃都引用了奇怪且奇怪的不同对象,就像调度表被破坏一样。
P.S.S。我在第三次和第四次运行之间冷启动了iPhone 4S。我也放弃了仪器和Xcode以确保它们没有扭曲。