2013-08-28 1 views
6

에 내가 여기에 최소한의 코드로 전체 didFinishLaunchingWithOptions을 넣어 : 결과iOS 앱 시간 0x000000008badf00d에서 시작 실패 - 지연을 applicationDidBecomeActive

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

, 나는 applicationDidBecomeActive에서 중요한 초기화를 넣어했다. 그러나 위의 오류가 발생합니다.

모든 참조 나는 그것에 대해 얻은 didFinishLaunchingWithOptions을 완료하는 것을 언급한다. applicationDidBecomeActive에 대한 수표가 필요합니까?

내 충돌 로그는 여기에 (어떻게 든, 나는이 곳에서 dsym 및 응용 프로그램과 함께 그것을 symbolicate 수 없습니다, 그래서 정확한 원인 인 문 알 수 없다. 그러나 모든 사람이 확실히하지 didFinishLaunchingWithOptions 것을 볼 수 있습니다)

입니다 like this 아주 단순한 뭔가,하지만 난해야 할 것 어떤 다른 것을 확실하지 않다, B -

나는 백그라운드 스레드 안에 내 applicationDidBecomeActive 초기화를 이동할 수 있습니다 applicationDidBecomeActive을 고려

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 

은 참으로 범인입니다 이 초기화 코드는 내부적으로 더 많은 스레드를 생성합니다. AFNetworking, Reachability 및 블록 기반의 다른 프레임 워크를 사용하고 있습니다. 이미 구축 된 아키텍처와 공통 코드에 많은 수정을 가할 수 있는지 궁금합니다.

나는 이걸 가능한 한 최단의 방법으로 다루는 방법을 꽤 혼란 스럽다.

+1

'0x8badf00d' ... 전형적으로, 시작하는 동안 왜 메인 스레드를 차단합니까? 계속 진행하는 데 너무 오래 걸리는 작업은 백그라운드 스레드에 넣어야합니다. – holex

+1

악기를 사용하여 주 스레드를 차단하고 코드를 최적화하는 코드 부분을 찾습니다. 당신이 모르는 것을 최적화하지 마십시오. – Kerni

+0

글쎄, 실제로 백그라운드 스레드 내에 있지만 AFNetworking 호출 등 볼 수있는 방식으로 내 혼란이 한 번만 더 배경 호출 내에서 전체 내용을 래핑 할 것입니다? 또한, applicationDidBecomeActive에 대한주의를 전혀 보지 못했습니다. 실제로 첫 번째 viewdidLoad 후에 실제로 호출되는 것을 보았습니다. –

답변

5

사용하기 전에 프로그램이 주 스레드에서 네트워크 요청을 많이한다고 의심합니다. 몇 초 동안 사용자 상호 작용을 차단합니다.

역 추적은 (항상/필연적으로) 중요하지 않습니다. 앱이 특정 시간 후 후에 사망하고 있습니다.

아마이 도구를 인스트루먼트에서 실행하고 오랜 시간이 걸릴 가능성이있는 작업을 볼 수 있습니다. I/O, 네트워크 요청 - 기본 스레드에서이 값을 이동하고 비동기 적으로을 수행하십시오. 또한 CPU 핫스팟을 평가하십시오. 초기 발사 시간은 그 근처에서 아무 곳에도 없어야합니다.

+1

+1 그리고 고마워, 나는 물건을 배경으로하는 방법과 관련된 요즘 기사를 읽는다. 내 혼란의 원인은 didBecomeActive에 대한 호루라기가 없었기 때문에 내 경우에는 충돌의 원천이었습니다.나는 최근에 내가 향상시킬 수있는 것을 볼 수있는 도구를 시험해 보겠다. –