내 응용 프로그램에서 네트워크 요청을 수행 중이며 NSOperationQueue에서 NSBlockOperations를 사용하여이 작업을 비동기 적으로 수행하고 있습니다. 그러나이를 호출 한 뷰 컨트롤러가 할당 해제 된 경우 (탐색 스택에서 팝핑 된 경우) 이러한 작업을 취소 할 수 있어야합니다. 내가 while 루프를 사용하여 App.net에서 매겨진 데이터를 반복 네트워크 요청을 DataController의 refreshPostsInPart:
방법에서self에 대한 강력한 참조를 사용하는 블록을 실행하는 동안 self의 @property 값을 변경합니다.
NSArray *posts;
__weak DataController *weakSelf = self;
NSBlockOperation *fetchPostsOperation = [NSBlockOperation blockOperationWithBlock:^{
DataController *strongSelf = weakSelf;
NSDictionary *response = [weakSelf refreshPostsInPart:PartFirst];
posts = [response objectForKey:@"posts"];
}];
[self.queue addOperation:fetchPostsOperation];
:
이 단순화 내가 가지고있는 버전입니다. 루프의 각 반복마다 DataController self.isCancelled
(BOOL 유형)의 속성을 확인합니다.이 경우 NO
요청을 계속합니다.
DataController의 내 dealloc
메서드에서이 속성을 YES
으로 설정 했으므로 while 루프의 다음 반복에서 요청을 중지합니다. 본질적으로 NSBlockOperation을 사용하면서 가난한 사람 cancelAllOperations
을 구현하고 있습니다.
질문 : 할당 해제의 방법에 NO
-self.isCancelled
를 설정할 때, 나는 또한 블록에서 사용중인 strongSelf의 참조 self.isCancelled
을 설정하는 건가요?
빠른 응답을 보내 주셔서 감사합니다. 나는 이것이 사실이라고 생각했지만 그것을 뒷받침 할 수있는 확실한 지식이 부족했다. –