gpt4 book ai didi

objective-c - 在 Objective-C 中暂停执行 WHILE 循环的最佳方法

转载 作者:行者123 更新时间:2023-12-02 04:56:16 24 4
gpt4 key购买 nike

while(...condition...)
{
//do something
NSDate *date = [NSDate date];
NSTimeInterval milliseconds = [date timeIntervalSince1970];
[NSThread sleepForTimeInterval:0.2];
date = [NSDate date];
NSTimeInterval milliseconds1 = [date timeIntervalSince1970];
NSLog(@"**** time taken : %f",milliseconds1-milliseconds);
//calling some method
}

此循环执行 2 分钟后,“耗时”从 200 毫秒增加到 10 秒。为什么?问题是什么 ?

最佳答案

假设您在多线程环境中运行,回答您的问题需要的信息很多 比您提供给我们的要多。可以这么说,不能保证您的休眠线程会在恰好 200 毫秒后运行“调用某些方法”,因为这取决于您的其他线程正在做什么。

像您的示例一样休眠线程通常被认为是一个坏主意。这是完成我认为您正在尝试做的事情的另一种方法,但具有...更好的公民身份。

- (void)loopIfNeeded
{
if (...condition...) {
// do something

// ... and then call -someMethod ~200ms later
[self performSelector:@selector(someMethod) withObject:nil afterDelay:0.2];
}
}

- (void)someMethod
{
// whatever some method does

[self loopIfNeeded]; // continue loop
}

最后,一些观察:

  • -[NSDate timeIntervalSince1970] 返回秒(及其分数,文档 here ),而不是毫秒(尽管它具有毫秒精度)。

  • 对于计时,我发现 CFAbsoluteTime 重量更轻:

    CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
    // do your thing
    CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
    CFTimeInterval elapsed = start - end; // or just NSLog(@"elapsed %f", start - end);

关于objective-c - 在 Objective-C 中暂停执行 WHILE 循环的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915165/

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