2012-09-25 4 views
1

나는 application:didFinishLaunchingWithOptions에서 서버에 일부 왼쪽 통해 데이터를 업로드해야하지만, 약간의 시간과 시간에 실행을 완료 할 수 없기 때문에 결국 응용 프로그램이 사망 할 수있다 소요, 그래서 사용 : 0.2F와응용 프로그램 : didFinishLaunchingWithOptions 바로 뒤에 선택기를 수행 하시겠습니까?

[myObject performSelector:withObject:afterDelay:] 

지연, application:didFinishLaunchingWithOptions 마무리하자,하지만 그것은 좋은 생각처럼 보이지 않습니다, 그래서 나는 단지 application:didFinishLaunchingWithOptions 후 선택기를 수행 할 수있는 방법이 궁금해?

나는 applicationDidBecomeActive이 있다는 것을 알고 있지만, application:didFinishLaunchingWithOptions에서 실행해야합니다.

답변

3

지연 0을 사용하면 제어가 실행 루프로 돌아 오자마자 실행됩니다.

그러나 appDidFinishLaunching에서 너무 오랫동안 블로킹을 차단하면 실행시 문제도 차단됩니다. 이 코드를 백그라운드 스레드로 옮겨야합니다. 주 스레드의 동기식 네트워크 액세스는 결코 좋은 생각이 아닙니다.

+0

지연이 0이면 appDidFinishLaunching 이후에 실행됩니까? – hzxu

+0

@hzxu 효과적으로, 그렇습니다. 아주 다음 일이 아닐 수도 있습니다 (예를 들어, 지연 시간이 0으로 연속적으로 두 번 호출되면 둘 다 다음 번에 수행 될 수 없음). 그러나 인위적인 일시 중지가 발생하지 않습니다. 그러나 네트워크 액세스에 관한 그의 주요 요점이 있습니다. 특히'NSURLConnection + sendAsynchronousRequest : queue : completionHandler :'를 보라. 이것은 동기 전송과 똑같이 간단하지만 차단은 없다. 실제로 그것을 사용하지 않아도되는 변명의 여지가 없습니다. – Tommy

+0

@ 토미 그래, 네트워크가 비동기지만, 나는 또한 메인 스레드에 있어야 그 방법에서 몇 가지 핵심 데이터 물건을 할 필요가 알아요. – hzxu

관련 문제