options
NSHashTable与NSMapTable均需要通过option取初始化,而option都是NSPointerFunctionsOptions类型的枚举
常用的枚举如下所示:
NSHashTableStrongMemory、NSPointerFunctionsStrongMemory相同,使用此选项为强引用对象,和NSSet的内存策略相同。
NSHashTableWeakMemory、NSPointerFunctionsWeakMemory相同,此选项使用weak存储对象,当对象被销毁的时候自动将其从集合中移除。
NSHashTableCopyIn、NSPointerFunctionsCopyIn相同,此选项在对象被加入到集合之前copy它们。
NSHashTableObjectPointerPersonality、NSPointerFunctionsObjectPointerPersonality相同,此选项是直接使用指针进行isEqual:和hash。
NSHashTable
NSHashTable与NSSet/NSMutableSet相似,相对于NSSet/NSMutableSet有如下特征:
NSSet/NSMutableSet对其对象是强引用,使用isEqual方法去检查对象是否相等,使用方法hash去获取hash值。
NSHashTable只有可变的,没有一个不变的和其对应。
NSHashTable可以对其对象是weak引用。
NSHashTable可以在加入的时候copy对象。
NSHashTable可以包含任意指针,使用指针去做相等或者hashing检查。
其创建案例如下:
枚举值为弱引用,并且哈希用指针进行isEqual和hash
[[NSHashTable alloc] initWithOptions:NSPointerFunctionsWeakMemory|NSPointerFunctionsObjectPointerPersonality capacity:0];
常用属性和方法如下
@property (readonly) NSUInteger count; //集合内元素数量
- (nullable ObjectType)member:(nullable ObjectType)object; //查看是否存在某个对象
- (NSEnumerator<ObjectType> *)objectEnumerator; //object的枚举器遍历器
- (void)addObject:(nullable ObjectType)object;//加入一个对象,会处理重复
- (void)removeObject:(nullable ObjectType)object; //删除指定对象
NSMapTable
NSMapTable与NSDictionary/NSMutableDictionary相似,相对于NSDictionary/NSMutableDictionary有如下特征:
NSDictionary/NSMutableDictionary会copy对应的key,强引用相应的value。
NSMapTable是可变的,没有一个不变的类与其对应。
NSMapTable可以对其key和value弱引用,在这种情况下当key或者value被释放的时候,此entry会自动从NSMapTable中移除。
NSMapTable在加入一个key、value的时候,可以对其key、value设置为copy。
NSMapTable可以包含任意指针,使用指针去做相等或者hashing检查。
NSMapTable对象在初始化的时候使用options去分别指定keys和values的行为。
其创建案例如下:
//两个枚举分别是key和value的枚举类型,其中key为强引用,并且哈希用指针进行isEqual和hash,value为弱引用,并且哈希用指针进行isEqual和hash
[NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory|NSPointerFunctionsObjectPointerPersonality valueOptions:NSMapTableWeakMemory|NSPointerFunctionsObjectPointerPersonality];
常用属性和方法如下
- (nullable ObjectType)objectForKey:(nullable KeyType)aKey; //根据key查找某个对象
- (void)removeObjectForKey:(nullable KeyType)aKey; //根据key删除某个对象
- (void)setObject:(nullable ObjectType)anObject forKey:(nullable KeyType)aKey; // add/replace value (CFDictionarySetValue, NSMapInsert) //加入key-value格式内容
@property (readonly) NSUInteger count;//数量
- (NSEnumerator<KeyType> *)keyEnumerator; //key的枚举器遍历器
- (nullable NSEnumerator<ObjectType> *)objectEnumerator; //object的枚举器遍历器
- (void)removeAllObjects; //删除所有对象
最后
多一点知识,多一点技巧,在完成一些功能时,相信它能给你带来一些帮助