2014-07-07 3 views
0

백그라운드 작업을 실행하는 <foo> 메서드가있는 클래스가 필요합니다.iOS 취소 가능 백그라운드 작업 구현

<foo> 메서드는 여러 스레드에서 여러 번 호출됩니다.이 메서드를 호출 할 때마다 이전 할당 된 백그라운드 스레드를 중지하고 새 스레드를 시작해야하므로 유일한 유효한 백그라운드 작업이 마지막으로 만들어집니다.

어떻게 수행하나요? 당신이 당신의 작업을 취소 할 수 있도록

감사

답변

1

당신은 NSOperation 클래스를 사용할 수 있습니다. Refer

-(void)startMyOperation 
{ 

    //Cancel the existing operation 
    [self cancelOperation]; 
    self.operation = [NSBlockOperation blockOperationWithBlock:^{ 
    //your code to be done in the background 
    }]; 
} 

-(void)cancelOperation 
{ 
    if(![self.operaion isFinished]) 
     [self.operation cancel]; 
} 
1

취소 해 작업을 구현하는 가장 좋은 방법은 NSOperation과 NSOperationQueue를 사용하는 것입니다. 설명서를주의 깊게 읽으십시오. NSOperation이 취소 될 때 실제로 작업을 중단하는 NSOperation을 만들려면 NSOperation이 수행하는 작업이 실제로 취소되었는지 여부를 수시로 확인하고 작업을 중단해야합니다.

아마도 NSOperation의 하위 클래스를 만들고 "start"메서드를 구현하고 "isFinished"메서드를 재정의하거나 "cancel"메서드를 재정의하거나 "isCancelled"속성을 관찰해야합니다. 취소, 일을 중지하고 KVO와 호환되는 방식으로 isFinished 속성을 변경하십시오 (대개 willChangeValueForKey : 및 didChangeValueForKey 보내기).

ASIHttpRequest 라이브러리는 이러한 종류의 작업을 수행하므로 소스를 살펴 보는 것이 좋습니다 코드.