iOS应用程序无法及时启动0x000000008badf00d - 在applicationDidBecomeActive中延迟

时间:2013-08-28 16:57:31

标签: iphone ios multithreading initialization appdelegate

我将整个didFinishLaunchingWithOptions放在最小的代码中:

 [UIApplication sharedApplication].idleTimerDisabled = YES;
 m_bDataLoadingNeeded = YES;
 return YES;

结果,我不得不在applicationDidBecomeActive中进行关键的初始化。 然而,我得到了上述错误。

我得到的所有参考文献都提到尽快完成didFinishLaunchingWithOptionsapplicationDidBecomeActive是否需要检查?

我的崩溃日志就在这里(不知怎的,我无法用所有dsym和app来表示它,所以我不知道哪个语句是确切的罪魁祸首。但是每个人都可以看到它绝对不是{{1} })

didFinishLaunchingWithOptions

考虑Exception Type: 00000020 Exception Codes: 0x000000008badf00d Highlighted Thread: 0 Application Specific Information: <MyBundleID> failed to launch in time Elapsed total CPU time (seconds): 1.600 (user 1.600, system 0.000), 4% CPU Elapsed application CPU time (seconds): 0.438, 1% CPU Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0: 0 libsystem_kernel.dylib 0x3c66f0fc 0x3c65e000 + 69884 1 libsystem_c.dylib 0x3c5b8124 0x3c5b7000 + 4388 2 SystemConfiguration 0x360d43ca 0x360c0000 + 82890 3 MyApp 0x001cd406 0xf9000 + 869382 4 MyApp 0x001ccb78 0xf9000 + 867192 5 MyApp 0x001cd148 0xf9000 + 868680 6 MyApp 0x001d77e4 0xf9000 + 911332 7 MyApp 0x001d7ed0 0xf9000 + 913104 8 MyApp 0x001cd908 0xf9000 + 870664 9 MyApp 0x001d46e0 0xf9000 + 898784 10 MyApp 0x000fb870 0xf9000 + 10352 11 UIKit 0x36177af6 0x36102000 + 482038 12 UIKit 0x3615d9bc 0x36102000 + 375228 13 UIKit 0x36105c34 0x36102000 + 15412 14 UIKit 0x361056c8 0x36102000 + 14024 15 UIKit 0x36105116 0x36102000 + 12566 16 GraphicsServices 0x37dfb5a0 0x37df5000 + 26016 17 GraphicsServices 0x37dfb1ce 0x37df5000 + 25038 18 CoreFoundation 0x342d2170 0x3423b000 + 618864 19 CoreFoundation 0x342d2112 0x3423b000 + 618770 20 CoreFoundation 0x342d0f94 0x3423b000 + 614292 21 CoreFoundation 0x34243eb8 0x3423b000 + 36536 22 CoreFoundation 0x34243d44 0x3423b000 + 36164 23 UIKit 0x3615c480 0x36102000 + 369792 24 UIKit 0x361592fc 0x36102000 + 357116 25 MyApp 0x000fb4be 0xf9000 + 9406 26 MyApp 0x000fb474 0xf9000 + 9332 确实是罪魁祸首:

我可以在后台线程中移动我的applicationDidBecomeActive初始化 - 非常简单like this,但我不确定我还需要做什么其他事情,因为这个初始化代码将在内部产生更多线程。我正在使用AFNetworking,Reachability和其他基于块的框架。我不知道我是否会最终对已经构建的架构和通用代码进行如此多的修改。

我很困惑如何以最佳和最短的方式解决这个问题。

1 个答案:

答案 0 :(得分:5)

我怀疑你的程序在主线程可用之前会发出一堆网络请求 - 阻止用户暂停交互几秒钟。

回溯不是(始终/必然)重要 - 您的应用在某个时间后被杀死。

你可以在仪器中运行它,看看你在哪里做可能需要很长时间的事情; I / O,网络请求 - 将这些请求从主线程移开,然后执行异步。还要评估CPU热点。最初的发布时间应该远不及那么久。