Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create unique IDs for objects across devices

Tags:

ios

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

like image 457
Ron Avatar asked Dec 10 '22 08:12

Ron


1 Answers

Why don't you create GUID, which called CFUUID in iOS? You can read here about GUIDs for iPhone

like image 177
Yaplex Avatar answered Jan 08 '23 05:01

Yaplex