2012-06-20 79 views
0

Xcode的dispatch_after模板Xcode的dispatch_after導致雙待的int64_t轉換警告

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){ 
}); 

導致以下警告

隱式轉換轉浮點數到整數:「雙」到「的int64_t」(又名'long long')

因爲

delayInNanoSecondsdouble轉換爲int64_t含蓄地

這有多糟?

+0

你可以發佈Xcode生成的代碼嗎?這將有助於在未來的Xcode版本中發生變化。 –

+0

如果該模板來自Xcode併產生該警告,請提交錯誤。 – bbum

+0

Radarred http://openradar.appspot.com/11738695 –

回答

2

一旦轉換,從秒到納秒的時間(以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的類型。