NSHashTable is modeled after
NSSet but provides different options, in particular to support weak relationships.
- iOS 6.0+
- macOS 10.5+
- tvOS 6.0+
- watchOS 2.0+
It can hold weak references to its members.
Its members may be copied on input or may use pointer identity for equality and hashing.
It can contain arbitrary pointers (its members are not constrained to being objects).
You can configure an
NSHashTableinstance to operate on arbitrary pointers and not just objects, although typically you are encouraged to use the C function API for
void *pointers. (See Hash Tables for more information) The object-based API (such as
add(_:)) will not work for non-object pointers without type-casting.
Because of its options,
NSHashTable is not a set because it can behave differently (for example, if pointer equality is specified two
isEqual: strings will both be entered).
When configuring hash tables, note that only the options listed in
NSHashTableOptions guarantee that the rest of the API will work correctly—including copying, archiving, and fast enumeration. While other
NSPointerFunctions options are used for certain configurations, such as to hold arbitrary pointers, not all combinations of the options are valid. With some combinations the hash table may not work correctly, or may not even be initialized correctly.
NSHashTable is not suitable for subclassing.