几乎每一个UIViewController
我都有一堆AFHTTPRequestOperation
,我必须正确处理任何类型的取消(按下取消按钮,返回UINavigationController
的堆栈等)。我想知道是否每个NSOperationQueue
创建一个UIViewController
并添加到控制器内调用的所有操作都是正确的方法吗?我的目标是取消所有操作[[NSOperationQueue mainQueue] cancelAllOperations]
但这会杀死所有已经开始的操作,特别是那些从之前的UIViewController
调用的操作。或者我应该为每个操作创建属性,在viewWillDissappear:(BOOL)animated
中调用它并在成功块中设置if语句取消状态吗?
答案 0 :(得分:3)
AFHTTPRequestOperationManager
个实例创建起来很便宜,并且每个实例都有自己的操作队列,因此很容易取消所有给定的UIViewController
操作:
- (void)dealloc {
[self.requestOperationManager.operationQueue cancelAllOperations];
}
这将取消通过self.requestOperationManager
创建的所有请求。您可以在AFHTTPRequestOperationManager
的init方法中创建UIViewController
。
我建议您取消视图控制器的dealloc方法中的操作,因为您知道它将不再需要。
答案 1 :(得分:0)
尝试过David Caunt的回答,但对我没有用。当我按下按钮时没有调用dealloc
,所以我想取消操作的最佳方法是在viewWillDisappear:
中调用它(我的错误是使用&&
而不是{{1} - 愚蠢的错误,但最简单的事情往往很难找到)
||