統計情報(30日間)


最新情報をツイート


人気の投稿

弱参照で持てるハッシュ

このエントリーをはてなブックマークに追加

iOS6から導入された NSHashTableとNSMapTableの解説。


NSHashTableは NSSet/NSMutableSet相当、NSMapTableは NSDictionary/NSMutableDictionary相当の機能を持つクラスで、mutableとimmutableの区別は無い。特徴的なのはオブジェクトへの参照方法を指定できること。ファクトリが用意されていてここでオプションを指定する。
+ (id)hashTableWithOptions:(NSPointerFunctionsOptions)options
+ (id)mapTableWithKeyOptions:(NSPointerFunctionsOptions)keyOptions valueOptions:(NSPointerFunctionsOptions)valueOptions
NSMapTableの方は key/valueそれぞれで参照方法を指定することができる。

参照の種類
enum {
   NSHashTableStrongMemory             = 0,
   NSHashTableZeroingWeakMemory        = NSPointerFunctionsZeroingWeakMemory,
   NSHashTableCopyIn                   = NSPointerFunctionsCopyIn,
   NSHashTableObjectPointerPersonality = NSPointerFunctionsObjectPointerPersonality,
   NSHashTableWeakMemory               = NSPointerFunctionsWeakMemory
};
typedef NSUInteger NSHashTableOptions;
ファクトリはこの他、弱参照指定をデフォルトとする + weakObjectsHashTableなども用意されている。機能的には最低限のものだけが用意されていて、NSSetやNSDictionaryと比べると使い勝手は劣る。例えば blocksを使ったイテレーションやsubscripting(添字アクセス)などが無い。

たまに欲しいと思う場面もあるので覚えておくといいかも。




リファレンス







Leave a Reply