Objective-CなどiOS関連の技術メモ。知識はここに投げ捨てて忘れる。

UUIDの作り方

最終更新日 2013年07月21日 12:43

UUIDは次のようにして生成することができる。

まず、iOS6以上のみが対象であればNSUUIDクラスを使って簡単に生成が可能。

iOS5以前ならCore Foundationを使う。

メモリ管理面について簡単に解説しておく。

取り扱うCore Foundationのオブジェクトは2つ。ひとつは一行目で取得しているCFUUIDオブジェクト、もうひとつは上記コードでは見えにくいけれど、二行目でCFUUIDCreateString関数の戻り値となっているCFStringオブジェクト。これらはARCの管理対象外なのでいずれも利用後にリファレンスカウンタを減らしておく必要がある。

このうちCFUUIDオブジェクトは3行目のCFReleaseでカウンタを減らしている。一方、CFStringオブジェクトは、NSString型へのキャスト時に__bridge_transfer修飾子をつけることでカウンタを減らしている。この修飾子はCore FoundationオブジェクトをObjective-Cオブジェクトにキャストする際に、CF側のオーナーシップを放棄することをARCに伝えるもので、ARCはここにカウンタを1減らすコードを挿入する。

参考までに、__bridge_transfer修飾子を使わず、このコードをちょっとまわりくどく書くと、以下のようになる。

CFStringのオブジェクトは3行目でNSString型として変数uuidから参照されることで、ARCによってカウントが1つ増やされ合計2になっている。CFReleaseを実行することで、このカウンタは1になり生き続けるが、変数uuidからの参照を失った時点で破棄されることになる。

詳解 Objective-C 2.0 第3版

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる

iPhoneプログラミングUIKit詳解リファレンス

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる