【问题标题】:Is there a method to generate a standard 128bit GUID (UUID) on the Mac?有没有在 Mac 上生成标准 128 位 GUID (UUID) 的方法?
【发布时间】:2010-09-22 10:55:35
【问题描述】:

是否有与 .NET 等效的内置函数

Guid.NewGuid();

在可可中?

我的愿望是生成一个类似于550e8400-e29b-41d4-a716-446655440000 的字符串,它代表一个唯一标识符。

【问题讨论】:

  • 与其问“是否有与 foo() 等效的函数”,您应该解释您所询问的函数的作用。 Mac OS X 没有“Guid”对象,它有 CFUUIDRef。长期从事 Mac 开发的人可能不知道地洞中的“Guid”。

标签: cocoa macos guid uuid core-foundation


【解决方案1】:

从 10.8 开始,您还可以使用:

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

【讨论】:

    【解决方案2】:

    您可以在~/.bash_profile 中创建别名并从终端调用uuid

    alias uuid="uuidgen | tr '[:upper:]' '[:lower:]'"
    

    【讨论】:

      【解决方案3】:

      或者有uuidgen 命令行工具。

      【讨论】:

      • 显然该实用程序已重命名为uuidgen。至少,对于雪豹来说。
      • 谢谢!我刚刚将它从genuuid 更新为uuidgen
      【解决方案4】:

      从 10.3 左右开始,您可以使用[[NSProcessInfo processInfo] globallyUniqueString]。然而,虽然这个 当前 生成了一个 UUID,但它从来没有并且仍然不能保证这样做,所以如果你真的需要一个 UUID 而不仅仅是任何唯一的字符串,你应该使用 CFUUID。

      【讨论】:

        【解决方案5】:

        至少在 MacOSX 10.5.x 上,您可以使用命令行工具“uuidgen”来获取您的字符串 例如

        $uuidgen

        054209C4-3873-4679-8104-3C18AE780512

        这个命令还有一个选项 -hdr 可以方便地以标题样式生成它

        更多信息请参见手册页。

        【讨论】:

        • 不正是 OP 想要的,但同样有用(谷歌在 Mac 上搜索命令行 UUID 生成时把我带到了这里)。另外:确认仍在 Mac OS X 10.9 "Mavericks" 上工作
        【解决方案6】:

        一些代码:

        对于字符串 UUID,下面的类方法应该可以解决问题:

        +(NSString*)UUIDString {
            CFUUIDRef theUUID = CFUUIDCreate(NULL);
            CFStringRef string = CFUUIDCreateString(NULL, theUUID);
            CFRelease(theUUID);
            return [(NSString *)string autorelease];
        }
        

        如果你真的想要字节(不是字符串):

        +(CFUUIDBytes)UUIDBytes {
            CFUUIDRef theUUID = CFUUIDCreate(NULL);
            CFUUIDBytes bytes = CFUUIDGetUUIDBytes(theUUID);
            CFRelease(theUUID);
            return bytes;
        }
        

        其中 CFUUIDBytes 是 UUID 字节的 struct

        【讨论】:

        • @Jay:从技术上讲,这就是 Core Foundation API,它是用 C 编写的。Cocoa 是用 Objective C 编写的,而且更加简洁(大部分时间)。
        • 查看下面大卫的回答 (stackoverflow.com/a/22093094/1172352) 了解在 10.8+ 上执行此操作的更简单方法,只需使用 NSUUID
        【解决方案7】:

        UUID 在 Core Foundation 中由 CFUUID 库处理。你要找的函数是CFUUIDCreate

        仅供进一步搜索:这些通常称为 UUID,术语 GUID 在 Microsoft 世界之外并不经常使用。您可能会更幸运地使用该搜索词。

        【讨论】:

          【解决方案8】:

          查看Wikipedia 文章和Core Foundation 页面。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-08-19
            • 2021-06-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-08
            相关资源
            最近更新 更多