cocoa-touch - NSOperation 由 NSOperationQueue 保留

标签 cocoa-touch cocoa automatic-ref-counting nsoperation nsoperationqueue

我仍在努力理解 NSOperations。我希望用户能够发起 HTTP 请求,将该请求封装到 NSOperation 对象中,然后就不用管它了。我想在主代码中释放 NSOperation 对象,但将其保留在 NSOperationQueue 中。

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

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

我认为队列将保留操作,以便我可以在实例化它的地方释放它,这是否正确?

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

最佳答案

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

您应该确保您的 NSOperation 子类与 isExecuting 和 isFinished 兼容 KVO,否则 NSOperationQueue 将不知道 NSOperation 是否已完成。

在这种情况下,使用 ARC,您不必“转移”所有权。仅当您创建 Core Foundation 对象(如 CF*Create 或 CF*alloc 等方法)并将其分配给 Objective-C 对象时,才“转移”所有权。

我详细写了ARC on my blog如果您有兴趣。

您可能还想查看MKNetworkKit ,我编写的一个网络框架,几乎可以满足您所需的一切。

关于cocoa-touch - NSOperation 由 NSOperationQueue 保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335882/

相关文章:

ios - 使用 ARC 的线程安全设计

ios - 如何创建随机闭合平滑 CGPath?

objective-c - 所有属性都应该声明为 "nonatomic"吗?

objective-c - Obj-C 中的每进程网络监视器?

cocoa - CGPDFDataFormatJPEG2000 可以用于 JPEG2000 图像以外的其他内容吗?

iphone - 为什么在非 ARC 环境中的属性上使用关键字 "strong"?

iphone - 使用 CATransition 重新创建 iOS 应用打开过渡

iphone - NSXMLParser 解析属性

cocoa - NSUnderlineStyle Single 是两个像素

Java Selenium 获取点击元素