sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

UUIDを生成して揮発型のIDを作る & CoreFoundationとのオブジェクトのやりとり

揮発型のIDの種としてUUIDを生成する

// UUIDを生成する
+ (NSString*) createUUID
{
    CFUUIDRef obj = CFUUIDCreate(kCFAllocatorDefault);
    NSString* uuid = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, obj);
    CFRelease(obj);
    return uuid;
}

CoreFoundationとのオブジェクトのやりとり

ARC下でCoreFoundationObjective-Cでオブジェクトやりとりする時には、それぞれcastが必要

__bridge_transfer

CF -> Obj-Cの時のキャスト。 CF側の参照カウントを-1してくれる。そのままだとCFReleaseが行われない限りCF側の参照カウントが残ったままとなる。

__bridge_retained

Obj-C -> CFの時のキャスト。 CF側の参照カウントを+1する。これをしないとObj-C側で参照カウントが-1された時に、オブジェクトが消滅する可能性がある。