オブジェクトの管理用に動的に生成できるユニークな識別子が欲しい
オブジェクトを管理するときに、ユニークな識別子が欲しい。
しかし、採番管理のために管理者クラスを設置するのは面倒臭い。
ちょうど先日読んでいた「iOSにおけるパターンによるオートマティズム」に良さげな方法が載っていました。
何度か書いたのですが、まだ手が憶えていない感じなので、ブログにも書いて記憶定着と備忘録に。
この本、Kindle化してくれないですかね。
UUID を使う
そんなときにはUUIDを使います。
UUIDは"機器の名前や時刻情報などを基に「十分大きなサイズかつランダムな数値」として生成される仕組み"なので、まずもって重複する可能性はありません。
(具体的には、およそ5.3×10の36乗分の1)
コード
本に掲載しているコードままだと、UUIDをNSString にキャストする際に怒られます。
どうやらARC絡みで、キャストに__bridge_transfer 指定を付記してやればええ様です。
こんな感じ。
CFUUIDRef uuid; uuid = CFUUIDCreate(NULL); identifier_ = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid); CFRelease(uuid);
参考
ちなみに、__bridge_transfer については、こちらのページを参考にさせて頂きました。
蛇足
ちょいとノマドりにお出かけ中。
昼食は待望のお店でとる予定。
UUIDの取得は禁止されていますよ。
昔はそうではなかったのですが、現在はダメです。
UUIDを取得しているアプリは、Appleの審査で拒否されます。
UUIDを用いず固有のiPhoneを識別する手段はAppleからは提供されていません(-_-;
自分で(クラウド上などに)データベースを作って識別する必要があります。
taturou
コメントありがとうございます。<(_ _)>
あれ?UDID だけじゃなくてUUIDも使用禁止されたでした?Σ(꒪⌓꒪ )
なんてこったい。orz
uma_blue taturou UUIDはOKでした(>_<。
というか「UDIDの代わりにUUID使え」でしたね。申し訳ない。
taturou あ、よかったですー。(T-T)
チラッとググっても「UUIDアウト」 の記事が見つかりませんで。
あー、これは英語の記事とか探さんとあかんのかなー?と思いはじめておりました。(笑)