I'm working on an App that will allow user's to edit the same database across multiple devices. The editing will include adding / deleting / modifying objects, so to make the synching job easier I would like to assign unique ID's to objects and I would like to reduce the chance of those IDs conflicting with IDs generated independently on other devices.
One idea I had was to use the current time to generate a unique ID. I'm currently thinking of creating IDs like this:
unsigned long long idNumber = ([NSDate timeIntervalSinceReferenceDate] * 1000000);
This creates a 64-bit integer that is the number of microseconds since the reference date. I believe it will take 500,000 years or so for this number to wrap, so I don' think I need to worry about any Y2K type issues.
I could store the NSTimeInterval as the ID, but I get uncomfortable comparing doubles for equality, even though it would probably work. Among other things, I can convert a 64-bit integer to and from a string without losing any precision and I don't think I can say the same about doubles.
This feels kind of like a "hack" to me, although I can't see any reason why it wouldn't work. It also seems that it should be portable to any device that supports "unsigned long long". My only issue is that I need to use 8-bytes to store the IDs, although I don't expect the number of IDs in my system to be that large, so I don't think the memory / disk usage from the IDs should be a big deal.
Any thoughts / warnings / advice would be greatly appreciated.
Thanks, Ron
Why don't you create GUID, which called CFUUID in iOS? You can read here about GUIDs for iPhone
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With