转换的NSString精确数目为performSelector:afterDelay:
-
16-09-2019 - |
题
我正在与一个web服务进行通信以检索进入我作为一个NSString函数的数值。这个数字告诉我的时间的确切数额要等到我执行另一个动作,这是至关重要的,它是准确的。
作为一个例子,如果字符串是“89283”,那么这意味着我必须等待89.283秒。所以我想知道的最佳方式在Objective-C的iPhone这个字符串转换为精确值,我可以传递到performSelector:afterDelay:功能。下面是我的示例代码,但我猜它不准确的。
NSString *myDelayString = @"89283";
int myDelay = [myDelayString intValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];
我觉得myDelay值确实应该是一个NSTimeInterval,但我不知道怎么做,从我的字符串。由于事先。
解决方案
下面用改变代码以允许双精度。
NSString *myDelayString = @"89283";
NSTimeInterval myDelay = [myDelayString doubleValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];
使用的doubleValue为了得到字符串作为双这样可以尽量避免整数除法。 NSTimeInterval的类型被定义为在iPhone上加倍,所以可以将双结果存储到它,然后将其传递给afterDelay:选择器的一部分
其他提示
NSTimeInterval是双重的,你正在做的整数除法。刚刚从int
其类型更改为double
,你应该是不错的。
使用运行循环,因为你,或者用的NSTimer
延迟是非常不准确的,因为你必须等待要完全处理之前的事件。当执行,你的代码可以运行100毫秒以上的比你所期望的那样。
因此,尽管你的精度高,准确度可能会受到严重缺乏。
根据你为什么需要这种精确定时,您可以改正的,你的计算和呈现差异没有实际意义。
没有足够的代表,只是添加评论,但要确保,如果你转换myDelay浮动您通过100.0分,否则你不会得到你所期望的。
不隶属于 StackOverflow