我正在开发一个应用程序,允许用户在多个设备上编辑同一个数据库。编辑将包括添加/删除/修改对象,因此为了使同步工作更容易,我想为对象分配唯一的ID,我希望减少这些ID与在其他设备上独立生成的ID冲突的可能性。
我的一个想法是使用当前时间生成唯一ID。我目前正在考虑创建这样的ID:
unsigned long long idNumber = ([NSDate timeIntervalSinceReferenceDate] * 1000000);
这将创建一个64位整数,它是自参考日期以来的微秒数。我相信这个数字需要50万年左右来包装,所以我认为我不需要担心任何Y2K类型的问题。
我可以将NSTimeInterval存储为ID,但是对于相等的双重比较我感到很不舒服,即使它可能会起作用。除此之外,我可以在不丢失任何精度的情况下将64位整数转换为字符串和从字符串转换。我不认为我可以对双打进行同样的说法。
这对我来说有点像“黑客”,虽然我看不出为什么它不起作用的任何理由。它似乎也可以移植到支持“unsigned long long”的任何设备上。我唯一的问题是我需要使用8个字节来存储ID,虽然我不希望我的系统中的ID数量那么大,所以我不认为ID中的内存/磁盘使用量应该是个大问题。
任何想法/警告/建议都将不胜感激。
谢谢, 罗恩
答案 0 :(得分:13)
为什么不创建在iOS中调用CFUUID的GUID?你可以read here about GUIDs for iPhone
答案 1 :(得分:1)
此外,如何使用[[UIDevice currentDevice] uniqueIdentifier]
?