ARC を有効にしたコードで UUID 文字列を生成する必要があります。
調査した結果、次のような結論に至りました。
CFUUIDRef uuid = CFUUIDCreate(NULL);
NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
__bridge_transfer
ARC の下にあるオブジェクトの漏洩を防ぐために、正しく使用していますか?
ベストアンサー1
私には良さそうです。私が使っているのはこれです(要旨)
- (NSString *)uuidString {
// Returns a UUID
CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
CFRelease(uuid);
return uuidString;
}
追加編集
OS X 10.8またはiOS 6をお使いの場合は、新しい非SUUIDCore Foundation にアクセスせずに文字列 UUID を生成するクラス:
NSString *uuidString = [[NSUUID UUID] UUIDString];
// Generates: 7E60066C-C7F3-438A-95B1-DDE8634E1072
しかし、ほとんどの場合、ファイル名またはディレクトリ名に一意の文字列を生成したいだけであれば、次のように のメソッドを使用できNSProcessInfo
ますgloballyUniqueString
。
NSString *uuidString = [[NSProcessInfo processInfo] globallyUniqueString];
// generates 56341C6E-35A7-4C97-9C5E-7AC79673EAB2-539-000001F95B327819
これは正式な UUID ではありませんが、ネットワークとプロセスに固有のものであり、多くの場合に適しています。