Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa touch NSOperatioQueue的NSOperation保留_Cocoa Touch_Cocoa_Automatic Ref Counting_Nsoperation_Nsoperationqueue - Fatal编程技术网

Cocoa touch NSOperatioQueue的NSOperation保留

Cocoa touch NSOperatioQueue的NSOperation保留,cocoa-touch,cocoa,automatic-ref-counting,nsoperation,nsoperationqueue,Cocoa Touch,Cocoa,Automatic Ref Counting,Nsoperation,Nsoperationqueue,我仍在努力了解国家安全局的运作。我希望用户能够启动HTTP请求,将该请求封装到NSOperation对象中,然后忘记它。我想在主代码中释放NSOperation对象,但将其保留在NSOperationQueue中 每个操作都通过将结果保存到核心数据中来完成,也可以取消。但是,我认为我只需要取消所有未完成的操作,而不是单个操作。例如,如果应用程序终止,我可能会全部取消它们 这允许用户继续启动请求,而不必单独跟踪它们。我可以重用相同的对象指针来初始化NSOperation对象,将其排队,然后释放它。

我仍在努力了解国家安全局的运作。我希望用户能够启动HTTP请求,将该请求封装到NSOperation对象中,然后忘记它。我想在主代码中释放NSOperation对象,但将其保留在NSOperationQueue中

每个操作都通过将结果保存到核心数据中来完成,也可以取消。但是,我认为我只需要取消所有未完成的操作,而不是单个操作。例如,如果应用程序终止,我可能会全部取消它们

这允许用户继续启动请求,而不必单独跟踪它们。我可以重用相同的对象指针来初始化NSOperation对象,将其排队,然后释放它。如果NSOperationQueue在添加时保留NSOperation,这看起来非常简单

队列将保留该操作,这样我就可以在实例化它的地方释放它,这对吗


另外,由于我是ARC的新手(我还没有尝试过),我如何转移这种所有权?我想我希望NSOperation在队列中有一个强属性,但我不想用弱属性实例化它。

你是对的。NSOperationQueues保留(强引用)添加到其中的NSOperations。 将自动从队列中删除,并在操作结束时释放


您应该确保您的NSOperation子类与KVO兼容,以便isExecuting和isFinished失败,因为NSOperationQueue不知道NSOperation是否完成

使用ARC,在这种情况下,您不必“转移”所有权。只有在创建核心基础对象(如CF*CREATE或CF*OLC等方法)并将其分配给Objto-C对象时,才“转移”所有权。

我写了关于你是否感兴趣的详细信息


你可能还想看看我写的一个网络框架,它几乎可以满足你所需要的一切。

谢谢你,穆根。这两个参考资料看起来都很有用。我已经浏览了MKNetworkKit,以便更好地了解有关NSO操作的一些基本知识。到目前为止,ARC博客的阅读效果也不错。它看起来非常完整。“您应该确保您的NSOperation子类在isExecuting和isFinished方面符合KVO,如果失败,NSOperationQueue将不知道NSOperation是否完成。”-值得强调。