使用带有浮点值的 dispatch_time

Use dispatch_time with a float value

我有一个简单的 iOS 应用程序,它需要延迟某个代码块才能 运行。

我正在使用 dispatch_time 方法来实现此目的并且效果很好。只是一个问题,dispatch_time是一个整数,所以你可以设置的时间只能是整数,比如1.0秒或者3.0秒等等....

我想设置延迟0.5秒。我怎样才能做到这一点?下面是我的代码:

    int64_t time_delay = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, time_delay * NSEC_PER_SEC);

    dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
        /*
           my block of code....
        */
    });

不要使用 int64_t,而是使用 CGFloat。它将正常工作。

CGFloat time_delay = 0.5f;

dispatch_time() 将纳秒作为第二个参数。从第二个参数中删除 NSEC_PER_SEC,您的延迟将以纳秒为单位

    double delay = 2.25;

    // 2250000000 = 2.25 * 1000000000
    dispatch_time_t offset_time = delay * NSEC_PER_SEC;

    // current mach_absolute_time + offset
    dispatch_time_t fire_time = dispatch_time(DISPATCH_TIME_NOW, offset_time);

    // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.25), dispatch_get_main_queue(), ^{
    dispatch_after(fire_time, dispatch_get_main_queue(), ^{
        NSLog(@"time %llu", t);
    });