处理更改后台任务的请求

时间:2013-12-18 16:01:18

标签: ios cocoa-touch background-process nsoperation

我对后台任务的概念性问题。

我需要在后台处理耗时的任务。该任务由滑块操作触发。现在,在主线程上运行任务时,滑块不会作出反应,因为滑块值的第一次更改会触发长计算。这对用户交互很不利。

我想使用NSOperation将任务放在后台,但我不知道如何处理快速更改的滑块值。当输入值再次改变时,有没有办法立即停止/重启启动的后台任务? 一个选项可能是使用NSOperationQueue并且只要滑块被激活就删除队列中未开始的过期任务?!?

由于

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你基本上需要让你的线程知道主UI线程的变化。你可以这样做:

  1. 在主线程中创建具有滑块值的公共属性。将指针传递给主要控制器/视图,该属性向工作线程公开。这样工作线程可以在需要时读取该值。

  2. 在工作线程中,在循环中进行计算或以其他方式经常检查该值,如果值已更改,则更改逻辑或重新开始计算。

答案 1 :(得分:1)

您可以使用带有NSPostWhenIdle样式通知(https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Notifications/Articles/NotificationQueues.html#//apple_ref/doc/uid/20000217-115535)的主线程通知队列来启动后台任务。

可以通过NSOperation上的NSOperationQueue启动后台任务。 NSOperation支持取消,您的后台任务需要定期检查isCancelled标记。如果用户在后台任务正在进行时继续滑动,则需要取消该任务并再次发布NSPostWhenIdle次通知。