ban*_*isa 6 objective-c nsoperation grand-central-dispatch nsrunloop ios
使用一些代码,我遇到了运行循环,我是新手,在NSOperations 里面.
他们NSOperation正在忙于下载数据 - 当他们忙碌时,会有代码等待下载完成,以NSRunLoops和线程休眠的形式.
我特别感兴趣的是这段代码:
while (aCertainConditionIsTrue && [self isCancelled]==NO) {
if(![[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]){
[NSThread sleepForTimeInterval:1.0];
}
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了关于运行循环的信息,runMode:beforeDate:并将等待输入源或超时.虽然我不是百分之百的东西.
在第一次执行时,它总是返回NO并命中sleepForTimeInterval:.这不好吗?
在一个特定的实用程序类中,它经常会sleepForTimeInterval:遇到很多 - 每个线程一次 - 这会严重损害性能.
对此有什么更好的解决方案或建议吗?
睡眠会锁定线程。也许您更改代码以使用performSelector:withObject:afterDelay。这样你的线程就可以继续运行。
...
done = NO;
[self checkDoneCondition:nil];
...
- (void)checkDoneCondition:(id)object {
if (aCertainConditionIsTrue && [self isCancelled]==NO) {
if(...) {
[self performSelector:@selector(checkDoneCondition:) withObject:[con error] afterDelay:1.0];
} else {
done = YES;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3633 次 |
| 最近记录: |