2008-11-15 26 views
20

Có chức năng dựng sẵn tương đương với .NET củaCó phương pháp nào để tạo ra một GUID 128 bit chuẩn (UUID) trên máy Mac không?

Guid.NewGuid(); 

trong ca cao?

Mong muốn của tôi là tạo một chuỗi dọc theo các dòng 550e8400-e29b-41d4-a716-446655440000 đại diện cho số nhận dạng duy nhất.

+5

Thay vì hỏi "có chức năng tương đương với foo()" bạn nên giải thích chức năng bạn đang yêu cầu không. Mac OS X không có đối tượng "Hướng dẫn", nó có CFUUIDRef. Các nhà phát triển Mac thời gian dài có thể không biết "Hướng dẫn" từ một lỗ trên mặt đất. –

Trả lời

42

UUID được xử lý trong Core Foundation, bởi thư viện CFUUID. Chức năng bạn đang tìm kiếm là CFUUIDCreate.

FYI để tìm kiếm thêm: chúng thường được gọi là UUID, thuật ngữ GUID không được sử dụng thường xuyên bên ngoài thế giới Microsoft. Bạn có thể có nhiều may mắn hơn với cụm từ tìm kiếm đó.

11

hoặc có công cụ dòng lệnh uuidgen.

+5

Dường như tiện ích đã được đổi tên thành 'uuidgen'. Ít nhất, như của Snow Leopard. – VxJasonxV

+0

Cảm ơn! Tôi vừa cập nhật nó từ 'genuuid' thành' uuidgen'. – ma11hew28

2

Kể từ 10.3 trở lên, bạn có thể sử dụng [[NSProcessInfo processInfo] globallyUniqueString]. Tuy nhiên, trong khi hiện tại tạo UUID, nó chưa bao giờ và vẫn không được đảm bảo để làm điều đó, vì vậy nếu bạn thực sự cần UUID và không chỉ bất kỳ chuỗi duy nhất nào, bạn nên sử dụng CFUUID.

32

Một số mã:

Đối với một UUID chuỗi, phương pháp lớp học sau đây nên làm như lừa:

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

nếu bạn thực sự muốn các byte (không phải là string):

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

trong đó CFUUIDBytes là một struct của các byte UUID.

+0

@Jay: Về mặt kỹ thuật, đó là API nền tảng cốt lõi, được viết bằng C. Cacao được viết trong Mục tiêu C và có nhiều hơn nhiều (hầu hết thời gian). – geon

+1

Xem câu trả lời của David dưới đây (http://stackoverflow.com/a/22093094/1172352) để có cách đơn giản hơn để thực hiện điều này trên 10.8+, chỉ cần sử dụng 'NSUUID'. – peterflynn

24

Ít nhất là trên MacOSX 10.5.x, bạn có thể sử dụng công cụ dòng lệnh "uuidgen" để lấy chuỗi ví dụ:

$ uuidgen

054209C4-3873-4679-8104-3C18AE780512

có cũng là một lựa chọn -hdr với COMAND này mà thuận tiện tạo ra nó trong phong cách tiêu đề

Xem man-page cho infos thêm .

+0

Điều này vẫn hoạt động như Mac OS X 10.7 "Lion" –

+0

Không chính xác những gì OP muốn, nhưng cũng hữu ích (và Google mang tôi đến đây khi tìm kiếm dòng lệnh UUID thế hệ trên máy Mac). Ngoài ra: xác nhận vẫn đang hoạt động trên Mac OS X 10.9 "Mavericks" – chesterbr

8

Vì 10.8 bạn cũng có thể sử dụng: NSString * uuidString = [[NSUUID UUID] UUIDString];

Các vấn đề liên quan