6

didFinishLaunchingWithOptionsここにある最小限のコードで全体を配置します。

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

その結果、重要な初期化を に入れなければなりませんでしたapplicationDidBecomeActive。それでも、上記のエラーが発生します。

それについて私が得たすべての参考文献は、didFinishLaunchingWithOptions私が行ったより早く完了するように言及しています. に必要なチェックはありますapplicationDidBecomeActiveか?

私のクラッシュログはここにあります(どういうわけか、すべての dsym と app を適切にシンボリック化できないため、どのステートメントが正確な原因であるかはわかりません。しかし、誰もがそれが間違いなく原因ではないことがわかります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は確かに犯人です:

初期化をバックグラウンド スレッド内に移動できます。これapplicationDidBecomeActiveは非常に単純化されたものですが、この初期化コードは内部でより多くのスレッドを生成するため、他に何をしなければならないかわかりません。ブロックベースのAFNetworking、Reachability、およびその他のフレームワークを使用しています。すでに構築されたアーキテクチャと共通コードに非常に多くの変更を加えることになるかどうかはわかりません。

これに最善かつ最短の方法で取り組む方法をかなり混乱させています。

4

1 に答える 1

5

あなたのプログラムは、使用可能になる前にメイン スレッドで多数のネットワーク リクエストを作成していると思われます。数秒間、ユーザーの操作をブロックしています。

バックトレースは(常に/必然的に)重要ではありません-アプリは一定時間後に強制終了されています。

これを Instruments で実行するだけで、時間がかかる可能性のある作業をどこで行っているかを確認できます。I/O、ネットワーク リクエスト - これらをメイン スレッドから移動し、非同期で実行します。CPU ホットスポットも評価します。最初の起動時間はそれほど長くはありません。

于 2013-08-28T18:41:56.777 に答える