NSHashTableは NSSet/NSMutableSet相当、NSMapTableは NSDictionary/NSMutableDictionary相当の機能を持つクラスで、mutableとimmutableの区別は無い。特徴的なのはオブジェクトへの参照方法を指定できること。ファクトリが用意されていてここでオプションを指定する。
+ (id)hashTableWithOptions:(NSPointerFunctionsOptions)options + (id)mapTableWithKeyOptions:(NSPointerFunctionsOptions)keyOptions valueOptions:(NSPointerFunctionsOptions)valueOptionsNSMapTableの方は key/valueそれぞれで参照方法を指定することができる。
参照の種類
enum { NSHashTableStrongMemory = 0, NSHashTableZeroingWeakMemory = NSPointerFunctionsZeroingWeakMemory, NSHashTableCopyIn = NSPointerFunctionsCopyIn, NSHashTableObjectPointerPersonality = NSPointerFunctionsObjectPointerPersonality, NSHashTableWeakMemory = NSPointerFunctionsWeakMemory }; typedef NSUInteger NSHashTableOptions;ファクトリはこの他、弱参照指定をデフォルトとする + weakObjectsHashTableなども用意されている。機能的には最低限のものだけが用意されていて、NSSetやNSDictionaryと比べると使い勝手は劣る。例えば blocksを使ったイテレーションやsubscripting(添字アクセス)などが無い。
たまに欲しいと思う場面もあるので覚えておくといいかも。
リファレンス
0 件のコメント:
コメントを投稿