暂停NSOperation

时间:2010-09-08 11:09:42

标签: iphone nsoperation nsoperationqueue

NSOperationQueue内有一些NSOperations(特别是NSInvocationOperations)。此操作会进行一些计算并相应地更改UI元素的状态(当然,通过performSelectorOnMainThread:...),通常使用动画。

我的UI有UINavigationViewController和一些用于导航到另一个视图的按钮。因此,用户可以保留当前视图,而计算/动画仍在进行中。我需要的是以某种方式停止这一点,直到用户回到当前视图。

我找到的唯一解决方案是创建一些线程安全的布尔标志 - 并在所有线程中检查它(类似于:while!flag sleep_for_some_time;)。还有更好的东西吗?

1 个答案:

答案 0 :(得分:13)

问题有点模糊,所以很难说不知道所有的代码。话虽如此,我可以通过以下方式解决问题:

选项1.在NSOperation的子类中,添加自己的原子KVO属性“isPaused”。在操作本身内,观察该属性并在其发生变化时进行相应处理。

选项2.您是否曾暂停操作队列?如果是这样,请考虑从您的操作中观察该属性,并且如果该值发生更改,则每个属性都可以独立执行。

选项3.取消队列中的所有操作,如果视图再次出现,则只需重新启动新操作。

总的来说,暂停正在进行的操作没有灵丹妙药。你必须烘焙自己的解决方案。但是伤害不应该太糟糕。