2014-09-11 6 views
3

탐색 모음에서 뒤로 단추를 클릭 할 때 비동기 작업을 중지하는 방법을 알고 싶습니다.이 코드를 수행했지만 작동하지 않습니다 ... dispatch_group_t imageQueue = dispatch_group_create(); viewdisappear에서 ios에서 dispatch_queue를 중지하는 방법은 무엇입니까?

dispatch_group_async(imageQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
        ^{ 
         imagedata=[[NSMutableArray alloc]init]; 

         for (int i=0; i<[imageURL count]; i++) 
         { 
          NSLog(@"clicked "); 

          [imagedata addObject:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[imageURL objectAtIndex:i]]]]]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"Avatardownloaded" object:imagedata userInfo:nil]; 
          } 




        }); 

....

-(void)viewDidDisappear:(BOOL)animated 
{ 
    dispatch_suspend(imageQueue); 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"Avatardownloaded" object:nil]; 
    [[NSNotificationCenter defaultCenter]release]; 
    [avatarimages release]; 
    [imagedata release]; 
    [imageURL release]; 
} 

내가 그것을 실행이 중지 나던 스레드를 중단하더라도 background.Anyone에서 실행의 keepon pls는 저

+0

이 링크를 확인하십시오. 도움이 될 수도 있습니다. http://stackoverflow.com/questions/6737044/suspending-gcd-query-problem/6737719#6737719 – freshking

+0

또한 기본 알림 센터를 해제하려고 시도하지 마십시오. –

답변

4

Grand Central Dispatch는 화재 및 잊지 작업에 적합합니다. 취소 가능한 작업을 원하면 NSOperationNSOperationQueue을 사용하는 것이 좋습니다.

+1

감사합니다 u .. 내가 지금 이유를 이해 – Tommy

+1

한 번 더 의심 .. 내가 SBJson 파서를 사용하고 있습니다. bcz는 개행 문자, 캐리지 리턴 문자를 해석 할 수 없습니다. 구문 분석을 위해 해당 문자를 제거했지만 UI에서 문장을 표시하는 방법 SBJson을 사용하여 파싱 한 개행 문자가 있습니다. – Tommy

1

아니, 당신은이 작업을 수행 할 수 있습니다 도움이 . NSTimer를 대신 사용하십시오.

1

dispatch_queue는 취소를 지원하지 않습니다. 그러나 블록 변수 또는 일부 전역 변수를 사용하여 dispatch_queue 코드에서 취소 가능 여부를 추적 할 수 있습니다. dispatch_queue의 코드는 cancel = YES (예 :) 동안 작동을 멈출 수 있어야합니다.

0

dispatch_suspend() (dispatch_resume())와 같은 기능이 있습니다. 이렇게하면 특정 큐에있는 블록의 새 블록이 예약되지 않습니다. 이미 실행중인 블록 인 에 영향을 미치지 않습니다. 이미 예약되어 실행중인 블록을 일시 중지하려는 경우 일부 조건을 확인하고 일시 중지하는 것은 코드에 달려 있습니다. 대기열/작업 취소를 일시 중단하려면 GCD 대신 NSOperation 및 NSOperationQueue를 사용해야합니다.

+0

기억하십시오 : NSOperations는 Grand Central Dispatch 위에 구축 된 API입니다. 따라서 NSOperations를 사용할 때 Grand Central Dispatch를 계속 사용하고 있습니다. NSOperations가 사용할 수있는 몇 가지 추가 기능을 제공합니다. 일부 작업은 다른 작업에 종속되게 만들거나, 항목을 확인한 후에 대기열을 다시 정렬하거나, 작업을 다시 사용하거나, 취소 또는 일시 중단하거나, 다양한 작업간에 종속성을 추가 할 수 있습니다. – NSPratik

관련 문제