2013-08-01 2 views
2

UI를 차단하지 않으면 서 데이터를 보낼 수 있어야합니다. 이 파일들은 꽤 크기 때문에 동 기적으로 전송하는 것은 옵션이 아닙니다.Objective C 백그라운드의 비동기 메서드

Apache Thrift를 통해 데이터를 보내는 모든 방법을 구현하는 클래스가 있습니다.

내가 본 모든 비동기 요청은 NSURLRequest와 NSURLConnection을 사용하지만 내 응용 프로그램에는 클래스를 활용하고 싶습니다.

기본적으로, 비동기 적으로이 메소드를 호출 할 : readDirectory에서

- (void)syncLocalData { 
    Manager *stateManager = [[Manager alloc] init]; 
    [stateManager readDirectory]; 
} 

, 나는 장치 디렉토리를 통해 이동하고 파일이있는 경우 데이터를 보내.

+0

무엇이 당신의 질문입니까? "장치 디렉토리를 통과하는 방법"? "데이터를 전송하는 방법"? 메서드를 비동기 적으로 호출하는 방법? –

+0

나는 디렉토리를 통과하고 데이터를 전송하는 것을 구현했다. 난 그냥 내 메서드를 비동기 적으로 호출 할 수 있기를 원한다. – averageUsername123

+0

왜 처음에는 동기식 도우미 메서드에 내재 된 비동기 네트워크 요청을 래핑했는지 궁금합니다. 나는 단순히 비동기 적으로 네트워크 요청을 호출 할 것이다. – CouchDeveloper

답변

5

GCD (그랜드 센트럴 파견)은 사용하기 쉬운 기능은 백그라운드 스레드에서 코드를 비동기 적으로 을 실행할 수 있습니다 : 당신이 인 (글로벌 큐를 사용할 수 있으며, 필요에 따라

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [yourInstance syncLocalData]; 
}); 

에 " 동시 "대기열), 또는"직렬 "대기열을 만듭니다.

+0

신난다, 이것이 효과가있는 것 같습니다! 사용자가 데이터를 전송하는 도중 응용 프로그램을 종료 할 수있는 상황을 어떻게 처리합니까? – averageUsername123

+1

그럼 배열 (또는 NSOperationQueue)에서 보유하고있는 더 비동기적이고 취소 가능한 네트워크 요청이 필요하며이를 취소하려는 경우 액세스 할 수 있습니다. – CouchDeveloper

+1

정리를 원할 경우 UIApplicationDidEnterBackgroundNotification에 가입 할 수 있습니다. –