gpt4 book ai didi

ios - NSTimer 要求我将其添加到运行循环中

转载 作者:IT王子 更新时间:2023-10-29 08:08:14 24 4
gpt4 key购买 nike

我想知道是否有人可以解释为什么分派(dispatch)回主队列并创建一个重复的 NSTimer 我必须将它添加到 RUN LOOP 因为它太火了?即使在使用 performselectorOnMainThread 时,我仍然必须将它添加到 RUN LOOP 中才能触发它。

下面是我的问题的一个例子:

#define queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define mainqueue dispatch_get_main_queue()

- (void)someMethodBeginCalled
{
dispatch_async(queue, ^{
int x = 0;
dispatch_async(mainqueue, ^(void){
if([_delegate respondsToSelector:@selector(complete:)])
[_delegate complete:nil];
});
});
}

- (void)compelete:(id)object
{
[self startTimer];

//[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];
}

- (void)startTimer
{
NSTimer timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(callsomethingelse) userInfo:nil repeats:YES];

//NSDefaultRunLoopMode
[[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];
}

编辑:我相信我对这个问题的措辞很差。我想知道为什么 [[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];startTimer 中是必需的,如果我调用 一些方法开始调用。如果我不包含该行,则计时器不会触发。

例如,如果我从 viewDidLoad 调用 startTimer,我可以删除 NSRunLoop 行,计时器将每 60 秒触发一次。

最佳答案

下面是如何将 NSTimer 添加到 runloop 中:

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];

关于ios - NSTimer 要求我将其添加到运行循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918103/

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