objective-c - iOS 中 1000 和 1000.0 的区别

标签 objective-c ios nstimer

这里我有一个设置 NSTimer 对象的 fireDate 的代码。

-(void)TimerFired:(NSTimer*)timer{
    long startTime=random()%1500+500;
    [timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:startTime/1000.0]];
    [controller startCarFromLane:self];
}

在上面的代码中,当我编写 :startTime/1000.0 时,我会在足够长的时间后触发计时器。但是,如果我将其更改为 :startTime/1000(不带 .0),计时器的下一个 fireDate 与上面的情况不同,计时器会更频繁地触发。我知道 dateWithTimeIntervalSinceNow 方法需要一个 NSTimeInterval,它是 double 的 typedef。但是我不能把 10.0 写成 10 吗? .0 对值(value)有何影响?

最佳答案

当你简单地写 1000 时,编译器暗示一个整数类型。因此,当对两个整数进行除法时(startTime 是一个 long,1000 可能是一个 int),这将是整数除法,从而导致准确(exact)比例的下限。例如,2500/1000 将为 2。但是,当您将 1000 写为 1000.0 时,编译器会发出一个 float 。整数除以 float 得到 float ,因此 2500/1000.0 将为 2.5,如预期的那样。基本上,这就是为什么仅使用整数时间隔会更短的原因。 (换句话说,整数除法舍弃了除以除数的模)。

关于objective-c - iOS 中 1000 和 1000.0 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464426/

相关文章:

iphone - NSNotification ...正确的方法?

iphone - 在 Xcode 中加速 NSTimer

ios - 计时器被触发两次但未被取消

iphone - 如何在单击 iPhone 中的 UIButton 时打开相机?

ios - TWRequest 在非 ARC 项目中使用时似乎会泄漏

ios - 将NSDate保存在核心数据XCode 5.0中

ios - 如何创建一个重定向到我在 App Store 上的游戏的链接?

ios - 什么 iOS 版本支持 NSTimer 有效属性?

ios - 需要在 UICollectionView 中显示视频和图片

iphone - 如何使用 ASIHTTPRequest 发送删除请求?