NSHashTable官方文档阅读

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 *)weakObjectsHashTable

    返回一个用于存储对其内容的弱引用的新NSHashTable对象。

    一个新的NSHashTable,它使用NSPointerFunctionsWeakMemory和NSPointerFunctionsObjectPersonality,初始容量为0。


  • + (NSHashTable *)hashTableWithOptions:(NSPointerFunctionsOptions)options

    使用给定的NSPointerFunctionsOptions去初始化NSHashTable;

Accessing Content

  • @property(nonatomic, readonly) ObjectType anyObject

    NSHashTable对象里面的一个数据;
    如果哈希表不包含对象,则为nil。

    返回的对象不能保证是随机的。


  • @property(readonly, copy) NSArray *allObjects

    返回NSHashTable中的所有数据;


  • @property(readonly, copy) NSSet *setRepresentation

    NSHashTable转为NSSet的形式;


  • @property(readonly) NSUInteger count

    NSHashTable中元素的数量;


  • - (BOOL)containsObject:(ObjectType)anObject

    给定的对象是否存在在NSHashTable中;

    所使用的相等性比较取决于所选择的选项。 例如,使用NSPointerFunctionsObjectPersonality选项将使用isEqual:方法来判断相等。


  • - (ObjectType)member:(ObjectType)object

    确定NSHashTable是否包含给定的对象,并返回该对象(如果存在),如果不存在返回nil;
    所使用的相等性比较取决于所选择的选项。 例如,使用NSPointerFunctionsObjectPersonality选项将使用isEqual:方法来判断相等。


  • - (NSEnumerator *)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 *)other

    从调用该方法的hashTable中删除不是另一个给定hashTable的成员的每个元素。

    所使用的相等性比较取决于所选择的选项。 例如,使用NSPointerFunctionsObjectPersonality选项将使用isEqual:方法来判断相等。


  • - (BOOL)intersectsHashTable:(NSHashTable *)other

    返回一个布尔值,指示给定的hashTable是否与调用者有交集。


  • - (BOOL)isSubsetOfHashTable:(NSHashTable *)other

    返回一个布尔值,指示调用者中的每个元素是否也存在于给定的hashTable中。


  • - (BOOL)isEqualToHashTable:(NSHashTable *)other

    调用者是否与给定的hashTable相等;
    如果两个hashTable的每个成员具有相同数量的成员,并且如果一个hashTable的每个成员存在于另一个hashTable中,则它们相等。

Set Functions

  • - (void)minusHashTable:(NSHashTable *)other

    从接收hashTable中删除给定hashTable中的每个元素(如果存在)。


  • - (void)unionHashTable:(NSHashTable *)other

    将给定hashTable的每个元素添加到接收hashTable(如果不存在)。

Accessing Pointer Functions

  • @property(readonly, copy) NSPointerFunctions *pointerFunctions

    用于管理hashTable中元素的NSPointerFunctions对象;

Constants

  • typedef NSUInteger NSHashTableOptions

    位用于指定NSHashTable对象中元素的行为的常量。

    1. const NSPointerFunctionsOptions NSHashTableStrongMemory

      同NSPointerFunctionsStrongMemory

    2. NSHashTableZeroingWeakMemory

      已被弃用,使用NSHashTableWeakMemory代替;

    3. const NSPointerFunctionsOptions NSHashTableCopyIn

      同NSPointerFunctionsCopyIn

    4. const NSPointerFunctionsOptions NSHashTableObjectPointerPersonality

      同NSPointerFunctionsObjectPointerPersonality

    5. const NSPointerFunctionsOptions NSHashTableWeakMemory

      同NSPointerFunctionsWeakMemory。使用NSPointerFunctionsWeakMemory对象引用将在最后一次release时变为NULL。

参考

NSHash​Table & NSMap​Table

你可能感兴趣的:(NSHashTable官方文档阅读)