gpt4 book ai didi

cocoa - 我应该使用哪种方法来定期调用方法?

转载 作者:行者123 更新时间:2023-12-03 17:23:10 24 4
gpt4 key购买 nike

我可以使用 NSTimer 或定期唤醒线程来定期调用函数。这两种方法的行为本质上是相同的:

        timer = [ NSTimer
scheduledTimerWithTimeInterval:1
target:self
selector:@selector(doSomething)
userInfo:nil
repeats:NO
];

 @autoreleasepool {
BOOL continueProcessingQueue = YES;
while (continueProcessingQueue) {
[self performSelectorOnMainThread:@selector(doSomething) withObject:nil waitUntilDone:NO];
NSDate *curtainTime = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSDate *currentTime = [[NSDate alloc] init];

while (continueProcessingQueue && ([currentTime compare:curtainTime] != NSOrderedDescending)) {
if ([self.processThread isCancelled] == YES) {
continueProcessingQueue = NO;
}
[NSThread sleepForTimeInterval:1];
currentTime = [[NSDate alloc] init];
}
}
}

使用计时器似乎更简单。在某些情况下,第二种方法是否比使用计时器更好?

最佳答案

a) 当您不跟踪辅助线程的事件状态时。一旦线程退出,您的计时器就会随之退出,这意味着您的计时器可能不会传递您期望的所有消息。

b) 当您的工作线程实际上并未轮询运行循环(长任务)时,和/或当您的辅助线程的工作很少将控制权返回到运行循环时,并且您需要更高的准确性发布到其他线程的里程碑/进度时线程。如果您的辅助线程大部分时间处于空闲/等待状态,那么这不是什么大问题。

事实上,在大多数情况下,您确实不应该使用上述任何一种方法。

关于cocoa - 我应该使用哪种方法来定期调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15216874/

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