NSHashTable
是更广泛意义的NSSet,区别于NSSet / NSMutableSet,NSHashTable有如下特性:
NSSet / NSMutableSet是对其成员的强类型引用,这些成员被通过hash方法和isEqual方法来完成哈希和对比功能
- NSHashTable是可变的
- NSHashTable可以持有weak类型的成员变量
- NSHashTable可以在添加成员变量的时候复制成员
- NSHashTable可以随意的存储指针并且利用指针的唯一性来进行hash同一性检查(检查成员变量是否有重复)和对比操作(equal)
NSMapTable
是对更广泛意义的NSDictionary。和NSDictionary / NSMutableDictionary相比具有如下特性:
- NSDictionary / NSMutableDictionary会复制keys并且通过强引用values来实现存储。
- NSMapTable是可变的。
- NSMapTable可以通过弱引用来持有keys和values,所以当key或者value被deallocated的时候,所存储的实体也会被移除。
- NSMapTable可以在添加value的时候对value进行复制
- 和NSHashTable类似,NSMapTable可以随意的存储指针,并且利用指针的唯一性来进行对比和重复检查。
NSPointerArray
类似于数组的集合,但具有更广泛的可用内存语义;继承自NSObject;NSPointerArray具有以下特点:
- 与NSMutableArray一样,使用下标有序的插入或移除元素,且可修改数组内容;
- 可以插入或删除nil,并且 nil 参与 count 的计算;
- count 可以 set,如果直接 set count,那么会使用 nil 占位;
- 可以使用 weak 来修饰成员;
- 成员可以是所有指针类型;
- 遵循 NSFastEnumeration,可以通过 for...in 来进行遍历。