2011-06-13 42 views
4

我正在开发一款应用程序,该应用程序允许用户在多个设备上编辑同一个数据库。编辑将包括添加/删除/修改对象,因此为了使同步工作更容易,我想为对象分配唯一的ID,并且希望减少这些ID与其他设备上独立生成的ID冲突的机会。如何为设备上的对象创建唯一ID

我有一个想法是使用当前时间来生成一个唯一的ID。目前,我正在思考这样创建一个ID:

unsigned long long idNumber = ([NSDate timeIntervalSinceReferenceDate] * 1000000);

这将创建一个64位整数,它是自基准日的微秒数。我相信这个数字需要花费50万年才能完成,所以我不认为我需要担心任何Y2K类型的问题。

我可以在NSTimeInterval存储的ID,但我得到了平等的比较难受双打,即使它可能会工作。除此之外,我可以将一个64位整数转换成字符串并从一个字符串转换而来,而不会失去任何精度,我不认为我可以对双打表示同样的看法。

这对我来说有点像“黑客”,虽然我看不出有什么理由不起作用。它似乎也应该可移植到任何支持“无符号long long”的设备。我唯一的问题是我需要使用8字节来存储ID,但我不认为我的系统中ID的数量很大,所以我不认为ID的内存/磁盘使用率应该是个大问题。

任何想法/警告/建议将不胜感激。

谢谢你,罗恩

回答

13

你为什么不创建GUID,这叫做CFUUID iOS中?你可以read here about GUIDs for iPhone

+0

感谢您的指针......这正是我所期待的! – Ron 2011-06-14 04:14:39

+1

从iOS 6开始,您可以使用:NSString * UUID = [[NSUUID UUID] UUIDString]; – Symmetric 2012-11-19 18:42:44

1

此外,如何使用[[UIDevice currentDevice] uniqueIdentifier]

+2

iOS5现已弃用 – Alan 2011-12-24 00:24:44

+0

就这样。看到其他答案! – buildsucceeded 2011-12-31 06:38:55