2008-11-15 2 views
20

이 있습니까 .NET의Mac에서 표준 128 비트 GUID (UUID)를 생성하는 방법이 있습니까?

Guid.NewGuid(); 

코코아에 동등한 기능을 내장?

내 식별자는 고유 한 식별자를 나타내는 550e8400-e29b-41d4-a716-446655440000 행을 따라 문자열을 생성합니다.

+5

"foo()와 동등한 함수가 있습니까?"라는 질문 대신 함수에 대해 묻는 것이 좋습니다. Mac OS X에는 "Guid"객체가 없으며 CFUUIDRef가 있습니다. 오랫동안 Mac 개발자들은 땅에서 구멍에서 "Guid"를 알지 못할 수도 있습니다. –

답변

42

UUID는 Core Foundation에서 CFUUID 라이브러리로 처리됩니다. 당신이 찾고있는 기능은 CFUUIDCreate입니다.

추후 검색을위한 참고 자료 : 가장 일반적으로 UUID로 알려져 있으며, GUID라는 용어는 Microsoft 세계 외부에서 자주 사용되지 않습니다. 해당 검색어에 대해 더 많은 행운이있을 수 있습니다.

11

또는 uuidgen 명령 줄 도구가 있습니다.

+5

분명히 그 유틸리티의 이름이 uuidgen으로 바뀌 었습니다. 적어도 스노 레퍼드부터. – VxJasonxV

+0

감사! 방금'genuuid'에서'uuidgen'으로 업데이트했습니다. – ma11hew28

2

10.3 정도이므로 [[NSProcessInfo processInfo] globallyUniqueString]을 사용할 수 있습니다. 그러나이 은 현재이 UUID를 생성하지만 결코 그렇게 한 것은 아니며 여전히 보장 할 수는 없으므로 고유 한 문자열이 아닌 UUID이 실제로 필요한 경우 CFUUID를 사용해야합니다.

32

일부 코드 :

문자열 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 Y이트 중 struct입니다.

+0

@ 제이 : 기술적으로 C 언어로 작성된 핵심 기반 API입니다. Cocoa는 Objective C로 작성되었으며 훨씬 더 간결합니다 (대부분). – geon

+1

10.8+에서 간단하게 'NSUUID'를 사용하면 David의 답변 (http://stackoverflow.com/a/22093094/1172352)을 참조하십시오. – peterflynn

24

적어도 MacOSX 10.5.x에서는 명령 행 도구 "uuidgen"을 사용하여 문자열 을 얻을 수 있습니다. 옵션 편리하게 더 infos에 대한 헤더 스타일에

보기 사람이 페이지를 생성이 COMAND와 -hdr도있다 $의 uuidgen

054209C4-3873-4679-8104-3C18AE780512

.

+0

이것은 여전히 ​​Mac OS X 10.7 "Lion"에서 작동합니다 –

+0

OP가 원하는 것은 아니지만 유용합니다 (Mac에서 명령 줄 UUID 생성을 검색 할 때 Google이 나를 데려 왔습니다). 또한 Mac OS X 10.9 "Mavericks"에서 계속 작동하는지 확인했습니다. – chesterbr

8

10.8 이후로 다음을 사용할 수도 있습니다. NSString * uuidString = [[NSUUID UUID] UUIDString];

관련 문제