Flurry API引起iPhone模拟器崩溃

4
我的应用在使用iOS5和iOS4.3 iPhone模拟器时崩溃,使用Xcode 4.2,堆栈跟踪显示在[FlurryAPI stopBackgroundTask]方法中发生了BAD_ACCESS信号。在iOS4.3模拟器中,只有当将应用发送到后台时才会崩溃,在iOS5中总是会崩溃。我附上了调试导航器的图片,显示了发生BAD_ACCESS的线程。
另一方面,使用真实设备时,应用程序运行良好。
您有什么想法可以获取更多信息,以及为什么会发生这种情况吗?

1
在升级到最新的Flurry库(并用FlurryAnalytics替换我的旧FlurryAPI调用)后,得到了完全相同的东西... - avocade
1
在我们的代码中执行[FlurryAnalytics startSession:FLURRYAPIKEY]时,它发生在Flurry为其代理创建的线程中。仍然不知道如何检查导致问题的调用来自哪里。 - yeforriak
我也遇到了同样的问题,找不到解决方法。我已经升级到Flurry 3.0.4版本,但在模拟器中仍然出现了这个问题,包括4.3和5.0版本。 - DaGaMs
我正在我的代码中注释掉这行[FlurryAnalytics startSession:FLURRYAPIKEY],只是为了在模拟器上运行应用程序...我知道这并不理想,但我没有找到更好的解决方法。 - yeforriak
3个回答

7
我通过在didFinishLaunchingWithOptions中添加以下内容来解决了这个问题。
#if TARGET_IPHONE_SIMULATOR
        [FlurryAnalytics setSessionReportsOnPauseEnabled:NO];
#endif

2

Flurry分析不会在主线程之外运行。它可能会在后台线程崩溃。


1

看起来你遇到了一个僵尸问题 - 在释放代码后仍在使用它。保留计数达到零,系统会释放并重新使用内存,然后你通过原始引用进行更改。现在你有两个不同的引用指向同一块内存,每个引用都期望有不同的对象存在。在你的情况下,其中一个引用在 flurry 中。

你的设备/模拟器之间存在差异的原因是两种架构使用不同的内存分配方案 - 模拟器似乎非常积极地重复使用内存。

启用 NSZombie 并在调试器中运行。如果你幸运的话,它会给你一个对象和它在释放后被使用的位置。

启用 NSZombie:菜单“Product”、“Edit Scheme...”、“Run”页面、“Diagnostics”选项卡,勾选“Enable Zombie Objects”。


谢谢你的回答,但是启用NSZombies并没有给我任何额外的信息 :( - yeforriak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接