2008-11-15 8 views
20

Czy jest wbudowany w podobnej funkcji do .NET naCzy istnieje metoda generowania standardowego 128-bitowego identyfikatora GUID (UUID) na komputerze Mac?

Guid.NewGuid(); 

w kakao?

Pragnę stworzyć ciąg znaków o numerze 550e8400-e29b-41d4-a716-446655440000, który reprezentuje unikalny identyfikator.

+5

Zamiast pytać "czy istnieje odpowiednik funkcji foo()", powinieneś wyjaśnić, o co chodzi w funkcji, o którą pytasz. Mac OS X nie ma obiektów "Guid", ma CFUUIDRef. Długo programiści Maca mogą nie znać "Guida" z dziury w ziemi. –

Odpowiedz

42

UUID obsługiwane są w Core Foundation, przez bibliotekę CFUUID. Funkcja, której szukasz, to CFUUIDCreate.

FYI do dalszych poszukiwań: są to najpopularniejsze identyfikatory UUID, termin GUID nie jest często używany poza światem Microsoft. Możesz mieć więcej szczęścia w tym wyszukiwaniu.

11

lub narzędzie wiersza poleceń uuidgen.

+5

Wygląda na to, że narzędzie zostało zmienione na 'uuidgen'. Przynajmniej od Snow Leopard. – VxJasonxV

+0

Dzięki! Właśnie zaktualizowałem go z 'genuuid' do' uuidgen'. – ma11hew28

2

Od 10.3 lub więcej, możesz użyć [[NSProcessInfo processInfo] globallyUniqueString]. Jednak podczas gdy ten obecnie generuje UUID, nigdy nie było i nadal nie ma gwarancji, że to zrobi, więc jeśli naprawdę potrzebujesz UUID, a nie tylko dowolnego unikalnego ciągu, powinieneś użyć CFUUID.

32

Niektóre kodu:

Dla UUID strun dodaje metoda klasy powinno załatwić sprawę:

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

jeśli naprawdę chcesz bajtów (nie String):

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

gdzie CFUUB bajtów to struct bajtów UUID.

+0

@Jay: Technicznie, to jest Core Foundation API, który jest napisany w C. Cocoa jest napisany w Objective C i jest dużo bardziej zwięzły (przez większość czasu). – geon

+1

Zobacz odpowiedź Davida poniżej (http://stackoverflow.com/a/22093094/1172352) dla prostszego sposobu na zrobienie tego na 10.8+, po prostu używając 'NSUUID'. – peterflynn

24

Przynajmniej na MacOSX 10.5.x można użyć narzędzia wiersza poleceń "uuidgen", aby uzyskać ciąg znaków np.

$ uuidgen

054209C4-3873-4679-8104-3C18AE780512

istnieje również opcja -hdr COMAND z tym że dogodnie wytwarza go w stylu nagłówka

Zobacz man-page na dalsze informacje o .

+0

To nadal działa od wersji Mac OS X 10.7 "Lion" –

+0

Nie dokładnie to, co chciał OP, ale równie użyteczny (a Google przywiózł mnie tutaj, gdy szukałem generacji UUID w wierszu poleceń na Macach). Ponadto: potwierdzone, wciąż działające na Mac OS X 10.9 "Mavericks" – chesterbr

8

Od 10.8 można również użyć: NSString * uuidString = [[NSUUID UUID] UUIDString];

Powiązane problemy