Esiste un metodo per generare un GUID (UUID) standard a 128 bit sul Mac?
-
08-07-2019 - |
Domanda
Esiste una funzione integrata equivalente a .NET
Guid.NewGuid();
in Cocoa?
Il mio desiderio è di produrre una stringa lungo le linee di 550e8400-e29b-41d4-a716-446655440000
che rappresenta un identificatore univoco.
Soluzione
Gli UUID sono gestiti in Core Foundation, dalla libreria CFUUID. La funzione che stai cercando è CFUUIDCreate .
Cordiali saluti per ulteriori ricerche: questi sono più comunemente noti come UUID, il termine GUID non viene usato molto spesso al di fuori del mondo Microsoft. Potresti avere più fortuna con quel termine di ricerca.
Altri suggerimenti
Alcuni codici:
Per un UUID di stringa, il seguente metodo di classe dovrebbe fare il trucco:
+(NSString*)UUIDString {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
se vuoi davvero i byte (non la stringa):
+(CFUUIDBytes)UUIDBytes {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFUUIDBytes bytes = CFUUIDGetUUIDBytes(theUUID);
CFRelease(theUUID);
return bytes;
}
dove CFUUIDBytes è un struct dei byte UUID.
Almeno su MacOSX 10.5.x potresti utilizzare lo strumento da riga di comando "uuidgen" per ottenere la tua stringa per es.
$ uuidgen
054209C4-3873-4679-8104-3C18AE780512
c'è anche un'opzione -hdr con questo comando che la genera comodamente in stile header
Vedi man-page per ulteriori informazioni.
oppure c'è lo strumento da riga di comando uuidgen
.
Dal 10.8 puoi anche usare: NSString * uuidString = [[[UUID NSUUID] UUIDString];
Consulta Wikipedia e l'articolo Core Foundation .
A partire dalla 10.3 circa, puoi utilizzare [[NSProcessInfo processInfo] globallyUniqueString]
. Tuttavia, sebbene questo attualmente generi un UUID, non è mai stato e non è garantito che lo faccia, quindi se hai davvero bisogno di un UUID e non solo una stringa univoca , dovresti usare CFUUID.