Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 取消请求时从NSOperationQueue中删除NSOperation的确切时间?_Ios_Objective C_Automatic Ref Counting_Nsoperation_Nsoperationqueue - Fatal编程技术网

Ios 取消请求时从NSOperationQueue中删除NSOperation的确切时间?

Ios 取消请求时从NSOperationQueue中删除NSOperation的确切时间?,ios,objective-c,automatic-ref-counting,nsoperation,nsoperationqueue,Ios,Objective C,Automatic Ref Counting,Nsoperation,Nsoperationqueue,我正在浏览一些说明如何在NSOperationQueue中管理NSOperation的文档。我的重点是,如果用户按下进度面板中的取消按钮或退出应用程序,则始终不执行操作。因此,请取消该操作以避免不必要地消耗CPU时间 所以,每当我需要取消操作时,我都应该触发cancel方法以防止进一步执行。然后,我必须定期使用operation object state isCancelled检查操作是否已取消。以下是我的问题: (1)在取消请求时,如果NSOperation正在从NSOperationQueu

我正在浏览一些说明如何在NSOperationQueue中管理NSOperation的文档。我的重点是,如果用户按下进度面板中的取消按钮或退出应用程序,则始终不执行操作。因此,请取消该操作以避免不必要地消耗CPU时间

所以,每当我需要取消操作时,我都应该触发cancel方法以防止进一步执行。然后,我必须定期使用operation object state isCancelled检查操作是否已取消。以下是我的问题:

(1)在取消请求时,如果NSOperation正在从NSOperationQueue中删除,那么我们如何仍然引用该NSOperation并取消其属性

根据苹果开发者类参考:

NSOperationQueue类调节一组NSOperation对象的执行。将操作添加到队列后,操作将保留在该队列中,直到显式取消或完成其任务


(2)如果我使用ARC,我是否需要关心取消请求?我举个例子。我有两个视图控制器A和B。在B中,我使用NSOperation发出8到10个NSURLRequest,并将所有请求放入NSOperationQueue中。此处,NSOperationQueue的对象是视图控制器B的属性。因此,如果用户按“上一步”按钮返回视图A,则在ARC下,NSOperationQueue的对象应自动删除(当我弹出视图A时)。所有的操作都将被ARC机制取消,还是我仍然应该有一些机制来避免无用的执行?

首先,只有当操作的
isFinished
属性变为true时,才会从队列中删除该操作

其次,如果取消分配B,那么队列和操作也将被取消分配。但是,您应该确保在代码中没有在稍后的时间点引用这些操作对象或队列。

isCancelled方法如果通过调用接收方的cancel方法显式取消了操作,则返回YES。因此,如果我取消请求,其状态将变为isFinished TRUE。然后我的问题编号(1)仍然存在…
,因此,如果我取消请求,其状态将变为isFinished TRUE
,您从何处获得此信息?这仅适用于未排队的操作。请检查此处检查响应取消命令的
部分。上面的表格也显示了密钥路径和描述。它明确指出,
操作队列在isFinished方法返回YES之前不会退出操作
对不起,croyneaus4u,我错了。该语句只能应用于未排队的操作。现在,我的第一个问题被澄清了。非常感谢royneaus4u。