2013-08-28 10 views
6

I burada asgari kod ile tüm didFinishLaunchingWithOptions koydu: Sonuç olarakiOS uygulaması zamanında 0x000000008badf00d ayında lanse edilmesi başarısız - gecikme applicationDidBecomeActive

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

, ben applicationDidBecomeActive çok önemli başlatma koymak zorunda kaldı. Yine de yukarıdaki hatayı alıyorum.

Yaptığım tüm referanslar, daha önce hazırladığım didFinishLaunchingWithOptions numaralı telefonu tamamlamayı düşündüğünden bahseder. applicationDidBecomeActive için gerekli herhangi bir kontrol var mı?

Benim kilitlenme günlük burada (her nasılsa, ben yerde tüm dsym ve bir uygulamayla symbolicate edemez, bu yüzden kesin suçlu olduğu açıklamada bilemez. Ama herkes kesinlikle değil didFinishLaunchingWithOptions olduğunu görebilir)

olduğunu like this oldukça basit bir şey, ama ben yapmak zorunda olacak başka hangi şeyler emin değilim, b -

Ben arka plan iş parçacığı içinde benim applicationDidBecomeActive başlatma taşıyabilirsiniz: applicationDidBecomeActive düşünüldüğünde

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 

gerçekten suçlu Çünkü bu başlangıç ​​kodu, dahili olarak daha fazla iş parçacığı üretecektir. AFNetworking, Reachability ve blok tabanlı diğer çerçeveler kullanıyorum. Sonunda mimarlık ve ortak kod için çok fazla değişiklik yapmam gerekecek mi bilmiyorum.

Bunu en iyi ve en kısa sürede nasıl ele alacağımı kafam karıştı.

+1

'0x8badf00d'… tipik, neden başlatma sırasında ana iş parçacığını engelliyorsunuz? Devam etmek için çok uzun zaman gerektiren iş, bir arka plan iş parçacığı içine konulmalıdır. – holex

+1

Kodunuzun, ana parçacığı engelleyen kısmını bulmak için kullanın ve bunu optimize edin. Hakkında hiçbir şey bilmediğin şeyleri optimize etme, onu daha da kötüleştirebilirsin. – Kerni

+0

Pek çok şey aslında arka plan iş parçacığı içinde ancak AFNetworking çağrıları gibi görebileceğim bir şekilde değil. Benim karışıklığım, tüm bu şeyi bir arka plan çağrısı içinde nasıl sarabilirim? Ayrıca, gerçekten applicationDidBecomeActive için herhangi bir uyarı sözü görmüyorum - ayrıca ilk viewdidLoad öğesinden sonra çağrıldığını gördüm. –

cevap

5

Programınızın, kullanmadan önce ana iş parçacığı üzerinde bir grup ağ isteği oluşturduğundan şüpheleniyorum - kullanıcıyı etkileşimin saniye cinsinden engellemesi.

Backtrace önemli (her zaman/mutlaka) önemli değil - uygulamanız belirli bir zamanından sonra öldürülüyor.

Muhtemelen bunu sadece Enstrümanlar'da çalıştırabilir ve uzun bir zaman alabilme potansiyeline sahip şeyler yaptığınızı görebilirsiniz; G/Ç, ağ istekleri - bunları ana iş parçacığından ayırın ve eşzamansız olarak gerçekleştirin. Ayrıca CPU sıcak noktalarını da değerlendirin. İlk fırlatma süreleri o kadar uzun olmamalı.

+1

+1 ve teşekkürler, son zamanlarda arka planların nasıl yapıldığını içeren şeyler okudum. Benim karışıklık kaynağım - davamda çökme kaynağı olan didBecomeActive'a karşı ıslık yoktu.Son zamanlarda iyileştirebileceğim şeyleri görmek için enstrümanları deneyeceğim. –