我正在创建一个简单的游戏。
我有以下代码:
- (void)doStuff
{
double delayInSeconds = [NSNumber randomFloatBetweenLowerBound:0.8f upperBound:2.6f]; // Own category on NSNumber returns random float.
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//
// Do stuff
//
if ([self shouldDoMoreStuff]) {
[self doStuff];
}
});
}
该方法运行于viewDidLoad
,但它也会在玩家死亡时运行(按“重试”后)。
在多次死亡之后,最终会同时运行该方法的许多迭代,而不仅仅是一次。
我对GCD了解不多NSOperation
等等,但我很确定我应该使用一些东西来控制它 - 也许NSOperation
- 所以在viewDidLoad
它已运行,然后当玩家死亡时,我取消操作并重新启动它。
正如我所说,我不太了解NSOperation
所以我不知道是不是:
a)我应该使用什么
b) 我应该如何使用它。
谁能提供一些关于如何实现这一目标的想法?
一如既往地感谢。
由于您是在单个线程上完成这一切(主队列位于主线程上),因此一个简单的标志就足够了。在入队Block之前检查一下;如果关闭,则设置它并入队,否则跳过入队。块应该做的最后一件事是关闭标志。
如果涉及多个线程,则需要为线程间标记而设计的东西,例如调度信号量,以指示块已经排队。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)