【问题标题】:How to create a GUID/UUID using iOS如何使用 iOS 创建 GUID/UUID
【发布时间】:2010-09-30 10:37:06
【问题描述】:

我希望能够在 iPhone 和 iPad 上创建 GUID/UUID。

目的是能够为分布式数据创建唯一的密钥。有没有办法用 iOS SDK 做到这一点?

【问题讨论】:

  • 有一篇关于如何确保您永远不会丢失生成的 UUID 的文章,即使对于 iOS 5 及更高版本使用 KeyChain 也是如此。 blog.onliquid.com/…

标签: ios uuid guid


【解决方案1】:

查看 Apple Developer 文档,我发现CFUUID 对象可用于 iPhone OS 2.0 及更高版本。

【讨论】:

    【解决方案2】:
    [[UIDevice currentDevice] uniqueIdentifier]
    

    返回您 iPhone 的唯一 ID。

    编辑:-[UIDevice uniqueIdentifier] 现在已被弃用,并且应用程序正在被 App Store 拒绝使用它。下面的方法现在是首选方法。

    如果你需要创建多个UUID,就用这个方法(带ARC):

    + (NSString *)GetUUID
    {
      CFUUIDRef theUUID = CFUUIDCreate(NULL);
      CFStringRef string = CFUUIDCreateString(NULL, theUUID);
      CFRelease(theUUID);
      return (__bridge NSString *)string;
    }
    

    编辑:2014 年 1 月 29 日: 如果您的目标是 iOS 6 或更高版本,您现在可以使用更简单的方法:

    NSString *UUID = [[NSUUID UUID] UUIDString];
    

    【讨论】:

    • [[UIDevice currentDevice] uniqueIdentifier] 自 iOS 5 起已被弃用,Apple 现在拒绝使用它的应用程序(截至 2012 年 3 月)。其余的响应仍然准确。
    • 这个问题已经有一段时间了,我很确定最初的问题不是关于设备的唯一标识符,而是关于获得有用的通用唯一标识符。
    • 要使此 ARC 兼容,您必须强制转换字符串对象并删除自动释放调用。换句话说,添加演员表: NSString* string = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, theUUID);
    • 从 iOS 6 开始,您可以使用: NSString *UUID = [[NSUUID UUID] UUIDString];
    • 如果我使用 [[NSUUID UUID] UUIDString];在iOS7及以上,我的应用程序不会被Apple拒绝吗?
    【解决方案3】:

    最简单的技术是使用NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]。请参阅NSProcessInfo 类参考。

    【讨论】:

    • 返回进程的唯一标识符。它与 GUID 没有任何相似之处。来自文档:“ID 包括主机名、进程 ID 和时间戳,可确保 ID 对于网络是唯一的”
    • 你可能是对的。它是一个实用的单线,可能不像 CFUUID 那样防弹。任何需要更严格的人都应该加入 CoreFoundation。
    【解决方案4】:

    我已在此处上传了一个简单但快速的 ObjC Guid 类实现:obj-c GUID

    Guid* guid = [Guid randomGuid];
    NSLog("%@", guid.description);
    

    它还可以解析各种字符串格式。

    【讨论】:

      【解决方案5】:

      这是我使用的简单代码,符合 ARC。

      +(NSString *)getUUID
      {
          CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
          NSString * uuidString = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
          CFRelease(newUniqueId);
      
          return uuidString;
      }
      

      【讨论】:

      • 老实说,这应该是公认的答案,最初的问题要求 GUID 或 UUID 生成器,每个人都回答如何获取手机的 UDID。通用唯一标识符 (UUID) 和唯一设备标识符 (UDID) 不是一回事。
      • 这里是一条直线 NSString *UUID = [[NSUUID UUID] UUIDString];
      【解决方案6】:

      在 iOS 6 中您可以轻松使用:

      NSUUID  *UUID = [NSUUID UUID];
      NSString* stringUUID = [UUID UUIDString];
      

      更多详情Apple's Documentations

      【讨论】:

      • 这是迄今为止最简单的解决方案。如果您在 iOS 6 之前不需要支持,请使用此。我使用的是核心数据生成的永久 ID,但这要好得多。 +1
      • 完美,谢谢!这是我当天的 +1 答案:)
      • 每次我在模拟器中运行应用程序时它都会改变。
      【解决方案7】:

      Swift 中:

      var uuid: String = NSUUID().UUIDString
      println("uuid: \(uuid)")
      

      【讨论】:

        【解决方案8】:

        Swift 3.0

        var uuid = UUID().uuidString
        

        【讨论】:

          猜你喜欢
          • 2010-09-11
          • 2010-10-06
          • 1970-01-01
          • 2011-08-10
          • 2011-12-15
          相关资源
          最近更新 更多