我一直在寻找一些具体的场景,当iPhone上的NSOperation
是一个理想的工具在应用程序中使用。据我的理解,这是一个围绕你自己的threaded
代码的封装。我还没有看到任何苹果演示应用程序使用它,我想知道如果我错过了一个伟大的工具,而不是使用NSThread
。NS操作iPhone
这里的理想解决方案是描述NSOperation
的用例场景以及如何使用它来解决您的问题。
我一直在寻找一些具体的场景,当iPhone上的NSOperation
是一个理想的工具在应用程序中使用。据我的理解,这是一个围绕你自己的threaded
代码的封装。我还没有看到任何苹果演示应用程序使用它,我想知道如果我错过了一个伟大的工具,而不是使用NSThread
。NS操作iPhone
这里的理想解决方案是描述NSOperation
的用例场景以及如何使用它来解决您的问题。
可可是我的女朋友有good tutorial使用NSOperation
和NSOperationQueue
。本教程利用NSOperation
在不同的线程中同时下载几个网页。
另外,参见Mac Research的this article。
一句话:NSOperationQueue
NSOperationQueue
是线程安全的(你可以从不同的线程添加进行操作即可,而不需要锁),使您能够链NSOP对象在一起。
我的Flickr iPhone应用程序Reflections使用NSOperation
和NSOperationQueue
广泛地管理下载图像和XML
。
警告:确保您阅读,重新阅读并了解文档在讨论“并发性”时的含义。
实际上,它不是*真正*线程安全的,它在Mac OS X 10.5上有问题,请参阅http://www.mikeash.com尽管他们提到iPhone似乎是免疫的,因为单核心处理器 – nduplessis 2009-05-07 08:52:11
我在我的iPhone应用程序中使用它的方式是基本上在我的应用程序委托中创建一个NSOperationQueue成员,并通过属性使其可用。然后,每当我需要在后台运行某些内容时下载一些XML我会创建一个NSInvocationOperation并将其发送到队列。
NSInvocationOperation *operationToPerform = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateXML) object:nil];
[[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] sharedOperationQueue] addOperation:operationToPerform];
[op release];
你也应该看看这个网址: http://developer.apple.com/cocoa/managingconcurrency.html
所有以上这些答案都是伟大的,但请务必阅读上面的文章,并自由使用这行代码中的:
if (self.isCancelled) return;
Coca提供的样本中没有使用该行,这是我的女朋友,直到我从现场崩溃登录后,才意识到这是一个问题/概念。
这里只是一个非常简单的实现,但需要时间来阅读教程,完全明白了一切:
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(methodToCall)
object:objectToPassToMethod];
[queue addOperation:operation];
我用它异步处理。这是从Web服务获取数据或协调需要大量时间运行的操作的最佳方式。因为它们是线程安全的,异步的(不会捆绑主线程),并且它们支持依赖关系,所以它们对于您的工具集来说是非常棒的工具。
依赖性允许您进行多个独立的操作,并确保以特定顺序执行并成功或出错。当你需要同步一堆数据时,这非常棒,但在同步子对象之前需要父对象进行同步。
,你可以尝试使用雨燕
let operation : NSOperation = NSOperation()
operation.completionBlock = {
println("Completed")
}
let operationQueue = NSOperationQueue.mainQueue()
operationQueue.addOperation(operation)
样品您可能要考虑选择这些优秀的答案,作为解决方案之一。 (: – corydoras 2009-12-16 03:21:19