gpt4 book ai didi

iphone - 将非主运行循环任务转换为 GCD

转载 作者:行者123 更新时间:2023-12-03 16:20:50 29 4
gpt4 key购买 nike

我有一个定期运行的任务,它最初设计为使用 NSThread 和 NSTimer 在与主运行循环不同的单独运行循环上运行。

适应这一点以利用 GCD 的最佳方法是什么?

当前代码:

-(void)initiateSomeTask
{
[NSThread detachNewThreadSelector:@selector(startTimerTask)
toTarget:self withObject:nil];
}

-(void)startTimerTask
{
// We won't get back the main runloop since we're on a new thread
NSRunLoop *myRunLoop = [NSRunLoop currentRunLoop];

NSPort *myPort = [NSMachPort port];
[myRunLoop addPort:myPort forMode:NSDefaultRunLoopMode];

NSTimer *myTimer = [NSTimer timerWithTimeInterval:10 /* seconds */
target:self selector:@selector(doMyTaskMethod)
userInfo:nil repeats:YES];

[myRunLoop addTimer:myTimer forMode:NSRunLoopCommonModes];
[myRunLoop run];
}

除了用 dispatch_async 替换 detachNewThreadSelector 之外,我还能做些什么吗?

最佳答案

您可以使用带有DISPATCH_SOURCE_TYPE_TIMER的dispatch_source_create来替换NSTimer的使用。那么你就不需要运行循环了。

不过,回到最初的情况,您实际上并不需要创建线程或使用调度来运行计时器。运行循环的要点是您不需要创建线程来执行诸如计时器之类的简单操作。

关于iphone - 将非主运行循环任务转换为 GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535361/

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