1

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')

なぜなら

delayInNanoSecondsdoubleからにint64_t暗黙的に変換されます

これはどれほど悪いですか?

4

1 に答える 1

3

時間を秒(で表されるdelayInSeconds)からナノ秒(で表されるdelayInNanoSeconds)に変換すると、aの特別な精度は必要なく、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

于 2012-06-20T15:06:52.463 に答える