NSOperation在iPhone上

Coo*_*coa 41 iphone multithreading cocoa-touch objective-c nsoperation

我一直在寻找一些具体的场景,NSOperation以确定iPhone 何时是应用程序中使用的理想工具.据我所知,这是编写自己的threaded代码的包装器.我还没有看到任何使用它的Apple演示应用程序,我想知道我是否错过了一个很棒的工具而不是使用它NSThread.

这里的理想解决方案是描述用例场景NSOperation以及如何使用它来解决您的问题.

e.J*_*mes 43

可可是我的女朋友有一个很好的教程使用NSOperationNSOperationQueue.本教程使用NSOperation在不同的线程中同时下载多个网页.

另外,请参阅Mac Research的这篇文章.


ndu*_*sis 33

我在iPhone应用程序中使用它的方法是在我的应用程序委托中基本创建一个NSOperationQueue成员,并通过属性使其可用.然后每当我需要在后台运行某些东西时,例如下载一些XML,我只需创建一个NSInvocationOperation并将其发送到queque.

NSInvocationOperation *operationToPerform = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateXML) object:nil];
[[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] sharedOperationQueue] addOperation:operationToPerform];
[op release];
Run Code Online (Sandbox Code Playgroud)


小智 10

总之一句话: NSOperationQueue

NSOperationQueue 是线程安全的(您可以从不同的线程向其添加操作而无需锁定)并使您能够将NSOp对象链接在一起.

我的Flickr iPhone应用程序,思考,使用NSOperationNSOperationQueue广泛管理下载图像和XML.

警告:确保您在阅读"并发"时阅读,重新阅读并理解文档的含义.

  • 实际上它并非*真的*线程安全,它在Mac OS X 10.5上有问题.请访问http://www.mikeash.com/?page=pyblog/dont-use-nsoperationqueue.html.虽然他们提到由于单核处理器,iPhone似乎对它免疫 (2认同)
  • 作为更新,http://www.mikeash.com/pyblog/use-nsoperationqueue.html是@nduplessis评论中链接的后续行动,其中指出10.5.7修复了上述问题.所以,NSOperationQueue现在可能是线程安全的. (2认同)

esi*_*ver 6

您还应该查看此URL:http: //developer.apple.com/cocoa/managingconcurrency.html

以上所有答案都很棒,但请确保您阅读上面的文章并在代码中自由使用此行:

if ( self.isCancelled ) return;
Run Code Online (Sandbox Code Playgroud)

在Coca提供的样本中没有使用该行是我的女朋友,直到我从现场获得崩溃登录才知道这是一个问题/概念.


Fle*_*lea 5

这是一个非常简单的实现,但需要时间阅读教程以完全理解所有内容:

NSOperationQueue *queue = [NSOperationQueue new];

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
    selector:@selector(methodToCall)
    object:objectToPassToMethod];

[queue addOperation:operation];
Run Code Online (Sandbox Code Playgroud)