私は自分のアプリでネットワーク リクエストを実行する作業を行っており、NSOperationQueue で NSBlockOperations を使用してこれを非同期的に実行しています。ただし、これらの操作を呼び出したView Controllerの割り当てが解除された場合(ナビゲーションスタックからポップされた場合)、これらの操作をキャンセルできるようにしたいと考えています。
これは私が持っているものの簡略化されたバージョンです:
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の refreshPostsInPart:
メソッドでは、while ループを使用して、App.net からページ分割されたデータに対して繰り返しネットワーク リクエストを行います。ループの反復ごとに、DataController self.isCancelled
(BOOL 型) のプロパティをチェックし、そうであれば、NO
リクエストを作成し続けます。
dealloc
DataControllerのメソッドで、このプロパティを に設定YES
して、while ループの次の繰り返しでリクエストの作成を停止します。cancelAllOperations
本質的に、 NSBlockOperation を使用している間、私は貧乏人を実装しています。
質問:私の dealloc メソッドで を設定self.isCancelled
するとき、ブロックで使用されている strongSelf 参照も設定していますか?NO
self.isCancelled