我应该为每个UIViewController创建一个NSOperationQueue吗?

时间:2013-11-29 13:27:04

标签: ios objective-c nsoperation afnetworking-2

几乎每一个UIViewController我都有一堆AFHTTPRequestOperation,我必须正确处理任何类型的取消(按下取消按钮,返回UINavigationController的堆栈等)。我想知道是否每个NSOperationQueue创建一个UIViewController并添加到控制器内调用的所有操作都是正确的方法吗?我的目标是取消所有操作[[NSOperationQueue mainQueue] cancelAllOperations]但这会杀死所有已经开始的操作,特别是那些从之前的UIViewController调用的操作。或者我应该为每个操作创建属性,在viewWillDissappear:(BOOL)animated中调用它并在成功块中设置if语句取消状态吗?

2 个答案:

答案 0 :(得分:3)

AFHTTPRequestOperationManager个实例创建起来很便宜,并且每个实例都有自己的操作队列,因此很容易取消所有给定的UIViewController操作:

- (void)dealloc {
    [self.requestOperationManager.operationQueue cancelAllOperations];
}

这将取消通过self.requestOperationManager创建的所有请求。您可以在AFHTTPRequestOperationManager的init方法中创建UIViewController

我建议您取消视图控制器的dealloc方法中的操作,因为您知道它将不再需要。

答案 1 :(得分:0)

尝试过David Caunt的回答,但对我没有用。当我按下按钮时没有调用dealloc,所以我想取消操作的最佳方法是在viewWillDisappear:中调用它(我的错误是使用&&而不是{{1} - 愚蠢的错误,但最简单的事情往往很难找到)

||