¿Hay algún método para generar un GUID estándar de 128 bits (UUID) en la Mac?
-
08-07-2019 - |
Pregunta
¿Existe una función integrada equivalente a la de .NET?
Guid.NewGuid();
en cacao?
Mi deseo es producir una cadena a lo largo de las líneas de 550e8400-e29b-41d4-a716-446655440000
que representa un identificador único.
Solución
Los UUID se manejan en Core Foundation, por la biblioteca CFUUID. La función que está buscando es CFUUIDCreate .
Para su información para búsquedas adicionales: estos se conocen comúnmente como UUID, el término GUID no se usa muy a menudo fuera del mundo de Microsoft. Es posible que tenga más suerte con ese término de búsqueda.
Otros consejos
Algún código:
Para un UUID de cadena, el siguiente método de clase debería funcionar:
+(NSString*)UUIDString {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
si realmente quieres los bytes (no la cadena):
+(CFUUIDBytes)UUIDBytes {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFUUIDBytes bytes = CFUUIDGetUUIDBytes(theUUID);
CFRelease(theUUID);
return bytes;
}
donde CFUUIDBytes es un struct de los bytes UUID.
Al menos en MacOSX 10.5.x puede usar la herramienta de línea de comando " uuidgen " para conseguir tu cuerda por ejemplo,
$ uuidgen
054209C4-3873-4679-8104-3C18AE780512
también hay una opción -hdr con este comando y lo genera convenientemente en estilo de encabezado
Consulte la página de manual para obtener más información.
o existe la herramienta de línea de comando uuidgen
.
Desde 10.8 también puede usar: NSString * uuidString = [[NSUUID UUID] UUIDString];
Consulte el Wikipedia y el artículo página Core Foundation .
Desde 10.3 más o menos, puede usar [[NSProcessInfo processInfo] globallyUniqueString]
. Sin embargo, aunque esto actualmente genera un UUID, nunca lo ha sido y todavía no se garantiza que lo haga, así que si realmente necesita un UUID y no cualquier cadena única , debe usar CFUUID.