gpt4 book ai didi

ios - dispatch_after 循环/重复

转载 作者:可可西里 更新时间:2023-11-01 05:00:58 27 4
gpt4 key购买 nike

我正在尝试创建一个这样的循环:

while (TRUE){
dispatch_after(...{
<some action>
});
}

在 viewDidLoad 之后。这个想法是反复重复 dispatch_after 。 dispatch_after 在执行操作之前等待两秒钟。

这不起作用 - 屏幕只是空白?它是卡在循环中还是...?

最佳答案

是的,您可以使用 gcd 做到这一点。不过,您还需要两个额外的 C 函数。

static void dispatch_async_repeated_internal(dispatch_time_t firstPopTime, double intervalInSeconds, dispatch_queue_t queue, void(^work)(BOOL *stop)) {    
__block BOOL shouldStop = NO;
dispatch_time_t nextPopTime = dispatch_time(firstPopTime, (int64_t)(intervalInSeconds * NSEC_PER_SEC));
dispatch_after(nextPopTime, queue, ^{
work(&shouldStop);
if(!shouldStop) {
dispatch_async_repeated_internal(nextPopTime, intervalInSeconds, queue, work);
}
});
}

void dispatch_async_repeated(double intervalInSeconds, dispatch_queue_t queue, void(^work)(BOOL *stop)) {
dispatch_time_t firstPopTime = dispatch_time(DISPATCH_TIME_NOW, intervalInSeconds * NSEC_PER_SEC);
dispatch_async_repeated_internal(firstPopTime, intervalInSeconds, queue, work);
}

已测试!按预期工作。

https://gist.github.com/4676773

关于ios - dispatch_after 循环/重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465084/

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