2011-08-22 58 views
0

我试图通过从NSOperation创建NSOperation。我希望我的操作在单独的线程上执行以及它应该支持取消选项,即我应该能够在任何时间点停止线程(或操作)。我尝试将我的操作实例添加到NSOperationQueue,一切正常,但“操作”正在执行一段时间后,这使得我的应用程序变慢。因此,我尝试通过调用[theOperation start];它的速度很快,但在主线程上执行单独运行我的操作。如何使NSOperation在单独的线程上运行,取消选项请帮助。如何使NSOperation无法在iPhone中添加到NSOperationQueue中

+0

你使用了哪个操作队列:'mainQueue'或你自己创建的实例? – Eimantas

+0

我通过分配NSOperationQueue类来使用NSOperationQueue的实例。 – Hariprasad

回答

0

之一:

1)不让它的的NSOperation,并明确创建线程。

2)使用第二操作队列和/或增加优先级。

3)使用容器类型作为结果。当您立即需要时,取消后台加载操作并手动加载。

0

我相信你需要实现- (BOOL)isConcurrent

- (BOOL)isConcurrent 
{ 
    return YES; 
} 

但也有问题。请阅读Apple reference docs on NSOperation,特别是子类别备注。另请注意,如果您希望操作可以取消,您需要自己执行取消操作:例如,在您的main选择器中,您需要检查操作是否已被取消,并立即返回(如果有)。

+0

我从'isConcurrent'方法返回'YES',但它没有在单独的线程上运行,它阻止了我的主线程。 – Hariprasad

+0

在你的'start'方法中,你是否同时启动你的任务,即调用'performSelectorInBackground:'或类似的?文档说你需要覆盖'start','isExecuting'和'isFinished'以及'isConcurrent'。 – damian

+0

我试着在backGround中调用启动方法的代码,但在那种情况下,我无法实现取消功能。 – Hariprasad

相关问题