2012-03-24 3 views
1

아주 간단한 채팅 응용 프로그램을 작성 중이며 응용 프로그램이 백그라운드로 들어갈 때 긴 폴링 선택기를 일시 중단하는 방법을 알고 싶습니다.긴 폴링 및 applicationDidEnterBackground :

-(void)startPolling 
{ 
    [self performSelectorInBackground:@selector(longPoll) withObject: nil]; 
} 

- (void) longPoll { 

    //Poll the Requested URL... 

    NSData* responseData = [NSURLConnection sendSynchronousRequest:request 
               returningResponse:&response error:&error]; 

    [self performSelectorOnMainThread:@selector(dataReceived:) 
          withObject:responseData waitUntilDone:YES]; 
    [self performSelectorInBackground:@selector(longPoll) withObject: nil]; 
} 

-(void) dataReceived: (NSData*) data 
{  
    //Reload my Tableview etc.. 
} 

이 어떻게 응용 프로그램이 다시 전경에 제공 될 때까지 longPoll 선택을 중단 applicationDidEnterBackground:를 사용합니까 :

현재, 나는 채팅방 클래스과 같이 긴 폴링을 처리 (A UIView의)가? 또는 응용 프로그램 대리인이 자동으로 수행합니까?

감사합니다.

답변

1

요청이 자동으로 일시 중지됩니다. 다시 요청한 후 이 성공한 후이 성공할 것이라고 보장 할 수는 없으므로 오류를 처리해야하지만 중단해서는 안됩니다.

항상 새로운 하드웨어 스레드를 회전시키는 performSelectorInBackground:을 사용하는 것보다이 방법을 쓰는 것이 더 좋습니다. 우선, 새 요청에 대한 새 스레드를 시작하는 대신 longPoll 내부 루프를 돌리는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다. longPoll 내부에서 어떻게 반복 할 것을 권하고 싶습니까? – Moe

+0

아마도 무한 루프 일 것입니다. 계속 폴링을 중지 할 수있는 조건이있는 경우 (기존의/프로그램 일시 중단 이외의) 폴링을 조건으로 사용할 수 있습니다. 이상적으로는 백그라운드 스레드에서 동기 요청 대신'sendAsynchronousRequest : queue : completionHandler :'를 사용해야합니다. –

관련 문제