我NSOperationQueue
内有一些NSOperations
(特别是NSInvocationOperations
)。此操作会进行一些计算并相应地更改UI元素的状态(当然,通过performSelectorOnMainThread:...
),通常使用动画。
我的UI有UINavigationViewController和一些用于导航到另一个视图的按钮。因此,用户可以保留当前视图,而计算/动画仍在进行中。我需要的是以某种方式停止这一点,直到用户回到当前视图。
我找到的唯一解决方案是创建一些线程安全的布尔标志 - 并在所有线程中检查它(类似于:while!flag sleep_for_some_time;)。还有更好的东西吗?
答案 0 :(得分:13)
问题有点模糊,所以很难说不知道所有的代码。话虽如此,我可以通过以下方式解决问题:
选项1.在NSOperation的子类中,添加自己的原子KVO属性“isPaused”。在操作本身内,观察该属性并在其发生变化时进行相应处理。
选项2.您是否曾暂停操作队列?如果是这样,请考虑从您的操作中观察该属性,并且如果该值发生更改,则每个属性都可以独立执行。
选项3.取消队列中的所有操作,如果视图再次出现,则只需重新启动新操作。
总的来说,暂停正在进行的操作没有灵丹妙药。你必须烘焙自己的解决方案。但是伤害不应该太糟糕。