iPhone: How to get current milliseconds?
获得当前系统时间毫秒的最佳方式是什么?
[[NSDate date] timeIntervalSince1970];
It returns the number of seconds since epoch as a double. I'm almost sure you can access the milliseconds from the fractional part.
If you're looking at using this for relative timing (for example for games or animation) I'd rather use CACurrentMediaTime()
double CurrentTime = CACurrentMediaTime();
Which is the recommended way; NSDate
draws from the networked synch-clock and will occasionally hiccup when re-synching it against the network.
It returns the current absolute time, in seconds.
If you want only the decimal part (often used when syncing animations),
let ct = CACurrentMediaTime().truncatingRemainder(dividingBy: 1)
I benchmarked all the other answers on an iPhone 4S and iPad 3 (release builds). CACurrentMediaTime
has the least overhead by a small margin. timeIntervalSince1970
is far slower than the others, probably due to NSDate
instantiation overhead, though it may not matter for many use cases.
I'd recommend CACurrentMediaTime
if you want the least overhead and don't mind adding the Quartz Framework dependency. Or gettimeofday
if portability is a priority for you.
iPhone 4S
CACurrentMediaTime: 1.33 µs/call
gettimeofday: 1.38 µs/call
[NSDate timeIntervalSinceReferenceDate]: 1.45 µs/call
CFAbsoluteTimeGetCurrent: 1.48 µs/call
[[NSDate date] timeIntervalSince1970]: 4.93 µs/call
iPad 3
CACurrentMediaTime: 1.25 µs/call
gettimeofday: 1.33 µs/call
CFAbsoluteTimeGetCurrent: 1.34 µs/call
[NSDate timeIntervalSinceReferenceDate]: 1.37 µs/call
[[NSDate date] timeIntervalSince1970]: 3.47 µs/call
链接地址: http://www.djcxy.com/p/39464.html
上一篇: 如何获取sqlite3 / iPhone上的列名称列表?
下一篇: iPhone:如何获得当前毫秒?