gpt4 book ai didi

objective-c - 在 NSOperation 中使用 NSThread sleep

转载 作者:可可西里 更新时间:2023-11-01 03:57:29 29 4
gpt4 key购买 nike

在处理一些代码时,我在 NSOperation 中遇到了运行循环,我是新手。

NSOperation 正忙于下载数据 - 在它们忙碌的同时,有代码等待下载完成,以 NSRunLoop 和线程的形式 sleep 。

我对这段代码特别感兴趣:

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: - 每个线程一次 - 这会严重影响性能。

对此有更好的解决方案或建议吗?

最佳答案

休眠会锁住线程。也许您更改代码以使用 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;
}
}
}

关于objective-c - 在 NSOperation 中使用 NSThread sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928080/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com