0
작업 내에서 NSInvocationOperation
을 취소해도 올바르게 작동합니까? 예 :NSInvocationOperation 사용을 취소하십시오
.H 파일 :
//defined in the interface
NSInvocationOperation *op1;
NSOperationQueue *loadQueue;
하는 .m 파일 :
-(id)init{
op1 = [NSInvocationOperation new];
loadQueue = [NSOperationQueue new];
}
-(void)downloadData{
op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadServerResponse:) object:newerRequest];
[loadQueue addOperation:op1];
}
이 지금은 서버에서 데이터를 다운로드하는 방법이있다. 오류가 있는지 확인하기위한 조건을 추가했습니다. 그렇다면 메서드 내에서 해당 작업을 취소하고 새 로그인 토큰을 검색 할 때 동일한 메서드를 다시 호출합니다.
- (void)loadServerResponse{
if(server_error){
[op1 cancel];
//fetch login token again
[self downloadData];
return;
}
뭐가 잘못 되었나요?
당신이 말한 것이 사실이라면 어떻게 NSInvocationOperation 개체에 액세스하여 취소 (또는 다른 방법) 할 수 있습니까? – 2cupsOfTech
좋은 질문 -이 특정 예제에서 OP는 작업이 실행하려고 시도했던 메서드 내에서 취소하려고 시도하고있었습니다. 이는 일반적으로 나쁜 생각으로 간주되는 스레드 경계에서 객체를 참조하려고 시도했음을 의미합니다. cancel을 호출하려면 작업을 대기열에 넣은 원래 스레드에서 호출하거나 NSOperation을 서브 클래스 화하고 내부적으로 관리해야합니다. –
이 좋습니다. 비슷한 일을하고 있지만 취소는 메서드에서 실행까지가 아닌 외부에서 발생합니다. 그렇게해야한다고 생각합니다. 나는 메소드 - 실행 내에서 isCancelled를 처리한다. – 2cupsOfTech