【发布时间】:2012-01-19 14:50:39
【问题描述】:
在处理一些代码时,我在NSOperations 中遇到了我不熟悉的运行循环。
NSOperations 正忙于下载数据 - 当他们忙时,有代码等待下载完成,形式为 NSRunLoops 和线程休眠。
我对这段代码特别感兴趣:
while (aCertainConditionIsTrue && [self isCancelled]==NO) {
if(![[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]){
[NSThread sleepForTimeInterval:1.0];
}
}
我已经阅读了有关运行循环的信息,runMode:beforeDate: 将等待输入源或超时。虽然我不是 100% 算作输入源。
在第一次执行时,它总是返回 NO 并点击 sleepForTimeInterval:。这很糟糕吗?
在一个特定的实用程序类中,它会经常访问sleepForTimeInterval: - 每个线程一次 - 这会严重影响性能。
对此有更好的解决方案或建议吗?
【问题讨论】:
标签: objective-c ios grand-central-dispatch nsoperation nsrunloop