Xcode的dispatch_after导致双重转换为int64_t转换警告

时间:2012-06-20 14:40:55

标签: c grand-central-dispatch

Xcode的dispatch_after模板

double delayInSeconds = 2.0;
double delayInNanoSeconds = delayInSeconds * NSEC_PER_SEC;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInNanoSeconds);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
});

导致以下警告

  

隐式转换将浮点数转换为整数:'double'为'int64_t'(又名'long long')

,因为

delayInNanoSeconds隐含地从double转换为int64_t

这有多糟糕?

1 个答案:

答案 0 :(得分:3)

一旦您将时间从秒(以delayInSeconds表示)转换为纳秒(以delayInNanoSeconds表示),您就不需要double的额外精度了安全转换为long long。您可以在调用dispatch_time()

时强制转换它
double delayInSeconds = 2.0;
double delayInNanoSeconds = delayInSeconds * NSEC_PER_SEC;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,
                                        (int64_t)delayInNanoSeconds);

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){});

这会导致警告消失。或者,您可以更改delayInNanoSeconds的类型。