0

我正在与 Web 服务通信以检索作为 NSString 进入我的函数的数值。这个数字告诉我等待我执行另一个操作的确切时间,并且它的精确性至关重要。

例如,如果字符串是“89283”,那么这意味着我必须等待 89.283 秒。所以我想知道在 iPhone 的 Objective-C 中将此字符串转换为可以传递给 performSelector:afterDelay: 函数的精确值的最佳方法。这是我的示例代码,但我猜它不准确。

NSString *myDelayString = @"89283";
int myDelay = [myDelayString intValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];

我认为 myDelay 值确实应该是 NSTimeInterval,但我不确定如何从我拥有的字符串中生成它。提前致谢。

4

4 回答 4

4

这是允许双精度更改的代码。

NSString *myDelayString = @"89283";
NSTimeInterval myDelay = [myDelayString doubleValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];

使用 doubleValue 将字符串作为双精度数,这样您就可以避免整数除法。NSTimeInterval 的类型在 iphone 上被定义为 double,所以你可以将 double 结果存入其中,然后将其传递给选择器的 afterDelay: 部分。

于 2009-12-08T01:17:08.623 回答
1

NSTimeInterval 是一个双精度数,你正在做整数除法。只需将其类型从intto更改为double,您应该会很好。

于 2009-12-08T00:57:39.780 回答
1

使用 run loops 或使用 NSTimer 的延迟是非常不准确的,因为您必须始终等待前一个事件被完全处理。执行时,您的代码可能比您预期的运行时间晚 100 毫秒或更长时间。

因此,尽管您的精度很高,但准确性可能会严重不足。

根据您需要这种精确计时的原因,您可以对计算进行更正,并使差异变得毫无意义。

于 2009-12-08T04:53:13.030 回答
0

没有足够的代表来添加评论,但请确保如果您将 myDelay 转换为浮点数,则除以 100.0 否则您将无法得到您期望的结果。

于 2009-12-08T01:09:10.337 回答