我想每隔10秒调用一个方法,但我想使用NSTimer之外的其他方法。我可以用它做什么?
答案 0 :(得分:11)
我知道你说你不想使用计时器,但只是为了确保你知道计时器有多简单......
[NSTimer scheduledTimerWithTimeInterval:10.0
target:self
selector:@selector(someMethod)
userInfo:nil
repeats:YES];
答案 1 :(得分:3)
如果您不想使用计时器,您可以使用内部将使用NSOperationQueue的GCD,但在所有情况下都可以使用。例如:我有一个继承自NSOperation的课程,所以上述方法不起作用,所以我选择了GCD:
double delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after(popTime, queue, ^{
[self methodYouWantToCall];
});
上面的代码每三秒钟调用一次方法methodYouWantToCall。
答案 2 :(得分:2)
您可以创建一个循环,将performSelector:withObject:afterDelay:
设置afterDelay到10.0。
我不建议这样做,使用NSTimer。
- (void)callMeEvery10Seconds
{
[self performSelector:@selector(callMeEvery10Seconds)
withObject:nil
afterDelay:10.0];
// ... code comes here ...
}
答案 3 :(得分:0)
如果您不使用Cocos2D,则必须使用NSTimer来执行此操作....
如果您使用的是Cocos2D,请使用计划方法
下面的链接显示了两者:
答案 4 :(得分:0)
最简单的方法是:
- (void)scheduleLoopInSeconds:(NSTimeInterval)delayInSeconds
{
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after(popTime, queue, ^{
[self callWhatEverMethodYouWant];
[self shceduleLoopcaInSeconds:delayInSeconds];//set next iteration
});
}
// now whenever you like call this, and it will be triggering "callWhatEverMethodYouWant" every 10 secs.
[self shceduleLoopcaInSeconds:10.0];