Existe um método para gerar um GUID de 128 bits padrão (UUID) no Mac?
-
08-07-2019 - |
Pergunta
Existe um construído em função equivalente à do .NET
Guid.NewGuid();
em Cocoa?
Meu desejo é produzir uma corda ao longo das linhas de 550e8400-e29b-41d4-a716-446655440000
o que representa um identificador único.
Solução
UUIDs são tratadas no Núcleo Foundation, pela biblioteca CFUUID. A função que você está procurando é CFUUIDCreate .
FYI para outras pesquisas: estes são mais comumente conhecido como UUIDs, o termo GUID não é usado muitas vezes fora do mundo da Microsoft. Você pode ter mais sorte com esse termo de pesquisa.
Outras dicas
Alguns código:
Para uma cadeia de UUID, o seguinte método de classe deve fazer o truque:
+(NSString*)UUIDString {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
Se você realmente quer que os bytes (não a String):
+(CFUUIDBytes)UUIDBytes {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFUUIDBytes bytes = CFUUIDGetUUIDBytes(theUUID);
CFRelease(theUUID);
return bytes;
}
onde CFUUIDBytes é um struct do UUID bytes.
Pelo menos no MacOSX 10.5.x que você pode usar a linha de comando da ferramenta "uuidgen" para obter sua seqüência por exemplo.
$ uuidgen
054209C4-3873-4679-8104-3C18AE780512
há também um -hdr opção com este comand que convenientemente gera isso em grande estilo cabeçalho
Veja man-page para mais infos.
ou há a ferramenta de linha de comando uuidgen
.
Desde 10.8 você pode também usar: NSString * uuidString = [[NSUUID UUID] UUIDString];
Confira artigo Wikipedia e página de fundação do núcleo
Desde 10.3 ou assim, você pode usar [[NSProcessInfo processInfo] globallyUniqueString]
. No entanto, enquanto este atualmente gera um UUID, ele nunca foi e ainda não é garantido para fazer isso, então se você realmente precisa de um UUID e não apenas qualquer string única , você deve usar CFUUID.