我使用sleepForTimeInterval
。我的代码
- (void)runningInBackground
{
while (1) {
[NSThread sleepForTimeInterval:waitInterval];
[self getInterval];
}
}
如果sleepForTimeInterval
未完成,我该如何更改间隔?
答案 0 :(得分:1)
你做不到。线程被阻塞时不会发生运行循环处理。
答案 1 :(得分:1)
几乎没有sleepForTimeInterval:
是正确iOS代码的情况。 iOS使用NSTimer
,NSOperation
或GCD队列执行此类操作。如果你发现自己正在调用NSThread
,那么你几乎肯定是在框架的错误部分。
在不知道问题详情的情况下,您可能需要的工具是NSTimer
。它们使用起来很简单,使用它们很容易解决这类问题。您只需使计时器无效并在想要更改间隔时创建一个新计时器。你不需要打破睡眠。
但是你应该总是问自己是否可以将轮询(基于区间)的解决方案转变为事件驱动的解决方案。你醒来的时候在做什么?如果你经常只是检查某些东西并重新入睡,那对电池来说非常糟糕。在大多数情况下,iOS有很好的解决方案可以让事件被驱动(所以当你想要的东西没有轮询时你就会被调用)。