NSHashTable
Overview
NSHashTable在NSSet之后添加的类,但提供了不同的选项,特别是支持弱引用。区别如下:
1. NSHashTable可以对其内的成员进行弱引用;
2. NSHashTable的成员可以在添加的时候被拷贝一份副本;并且可以控制在将对象添加到NSHashTable中时是否调用对象上的 isEqualTo: 和 hash方法;
3. 它可以包含任意指针(其成员不被约束为对象)。
你可以将 NSHashTable 实例配置为对任意指针进行操作,而不仅仅是对象,尽管通常会鼓励使用 C 的 API: void * 指针来操作。基于对象的 API(例如 addObject:)将无法在不进行类型转换的情况下对无对象指针操作。
由于它的一些选项,NSHashTable不是一个集合,因为它可以有不同的行为(例如,如果指定了两个isEqual:相等的字符串可能都被添加)。
配置NSHashTable时,请注意,只有NSHashTableOptions中列出的选项才能保证其余的API能正常工作,包括复制,归档和快速枚举。 虽然其他NSPointerFunctions选项用于某些配置,例如保留任意指针,但并不是所有选项的组合都有效。 使用某些组合,NSHashTable可能无法正常工作,甚至可能无法正确初始化。
NOTE: NSHashTable不适用于子类化。
Symbols
Initialization
-
- (instancetype)initWithOptions:(NSPointerFunctionsOptions)options capacity:(NSUInteger)initialCapacity
根据使用的属性来初始化NSHashTable;
options:NSHashTable里面元素的支持的选项;
initialCapacity:NSHashTable可以容纳的元素的初始数量。
-
- (instancetype)initWithPointerFunctions:(NSPointerFunctions *)functions capacity:(NSUInteger)initialCapacity
同上;
Convenience Constructors
-
+ (NSHashTable<ObjectType> *)weakObjectsHashTable
返回一个用于存储对其内容的弱引用的新NSHashTable对象。
一个新的NSHashTable,它使用NSPointerFunctionsWeakMemory和NSPointerFunctionsObjectPersonality,初始容量为0。
-
+ (NSHashTable<ObjectType> *)hashTableWithOptions:(NSPointerFunctionsOptions)options
使用给定的NSPointerFunctionsOptions去初始化NSHashTable;
Accessing Content
-
@property(nonatomic, readonly) ObjectType anyObject
NSHashTable对象里面的一个数据;
如果哈希表不包含对象,则为nil。返回的对象不能保证是随机的。
-
@property(readonly, copy) NSArray<ObjectType> *allObjects
返回NSHashTable中的所有数据;
-
@property(readonly, copy) NSSet<ObjectType> *setRepresentation
NSHashTable转为NSSet的形式;
-
@property(readonly) NSUInteger count
NSHashTable中元素的数量;
-
- (BOOL)containsObject:(ObjectType)anObject
给定的对象是否存在在NSHashTable中;
所使用的相等性比较取决于所选择的选项。 例如,使用NSPointerFunctionsObjectPersonality选项将使用
isEqual:
方法来判断相等。
-
- (ObjectType)member:(ObjectType)object
确定NSHashTable是否包含给定的对象,并返回该对象(如果存在),如果不存在返回nil;
所使用的相等性比较取决于所选择的选项。 例如,使用NSPointerFunctionsObjectPersonality选项将使用isEqual:
方法来判断相等。
-
- (NSEnumerator<ObjectType> *)objectEnumerator
返回包含NSHashTable中所有元素的枚举器对象。
你可以按照如下方法使用:NSEnumerator *enumerator = [myHashTable objectEnumerator]; id value; while ((value = [enumerator nextObject])) { /* code that acts on the hash table's values */ }
NOTE:使用快速枚举协议中的方法会更有效;(NSFastEnumeration)
Manipulating Membership
-
- (void)addObject:(ObjectType)object
给hashTable添加指定元素;
-
- (void)removeObject:(ObjectType)object
删除hashTable中的指定元素;
-
- (void)removeAllObjects
删除hashTable中的所有元素;
Comparing Hash Tables
-
- (void)intersectHashTable:(NSHashTable<ObjectType> *)other
从调用该方法的hashTable中删除不是另一个给定hashTable的成员的每个元素。
所使用的相等性比较取决于所选择的选项。 例如,使用NSPointerFunctionsObjectPersonality选项将使用
isEqual:
方法来判断相等。
-
- (BOOL)intersectsHashTable:(NSHashTable<ObjectType> *)other
返回一个布尔值,指示给定的hashTable是否与调用者有交集。
-
- (BOOL)isSubsetOfHashTable:(NSHashTable<ObjectType> *)other
返回一个布尔值,指示调用者中的每个元素是否也存在于给定的hashTable中。
-
- (BOOL)isEqualToHashTable:(NSHashTable<ObjectType> *)other
调用者是否与给定的hashTable相等;
如果两个hashTable的每个成员具有相同数量的成员,并且如果一个hashTable的每个成员存在于另一个hashTable中,则它们相等。
Set Functions
-
- (void)minusHashTable:(NSHashTable<ObjectType> *)other
从接收hashTable中删除给定hashTable中的每个元素(如果存在)。
-
- (void)unionHashTable:(NSHashTable<ObjectType> *)other
将给定hashTable的每个元素添加到接收hashTable(如果不存在)。
Accessing Pointer Functions
-
@property(readonly, copy) NSPointerFunctions *pointerFunctions
用于管理hashTable中元素的NSPointerFunctions对象;
Constants
-
typedef NSUInteger NSHashTableOptions
位用于指定NSHashTable对象中元素的行为的常量。
-
const NSPointerFunctionsOptions NSHashTableStrongMemory
同NSPointerFunctionsStrongMemory
-
NSHashTableZeroingWeakMemory
已被弃用,使用NSHashTableWeakMemory代替;
-
const NSPointerFunctionsOptions NSHashTableCopyIn
同NSPointerFunctionsCopyIn
-
const NSPointerFunctionsOptions NSHashTableObjectPointerPersonality
同NSPointerFunctionsObjectPointerPersonality
-
const NSPointerFunctionsOptions NSHashTableWeakMemory
同NSPointerFunctionsWeakMemory。使用NSPointerFunctionsWeakMemory对象引用将在最后一次release时变为NULL。
-
网友评论