NSMapTable

NSMapTable: 不只是一个能放weak指针的 NSDictionary - isaced

[iOS]NSHashTable和NSMapTable用法 - 简书

NSDictionary 的局限性

NSDictionary 提供了 key -> object 的映射。从本质上讲,NSDictionary 中存储的 object 位置是由 key 来索引的。

由于对象存储在特定位置,NSDictionary 中要求 key 的值不能改变(否则 object 的位置会错误)。为了保证这一点,NSDictionary 会始终复制 key 到自己私有空间。

这个 key 的复制行为也是 NSDictionary 如何工作的基



础,但这也有一个限制:你只能使用 OC 对象作为 NSDictionary 的 key,并且必须支持 NSCopying 协议。此外,key 应该是小且高效的,以至于复制的时候不会对 CPU 和内存造成负担。

这意味着,NSDictionary 中真的只适合将值类型的对象作为 key(如简短字符串和数字)。并不适合自己的模型类来做对象到对象的映射。



NSHashTableWeakMemory


不会修改HashTable容器内对象元素的引用计数,并且对象释放后,会被自动移除

NSMapTable对象类似与NSDictionary的数据结构,但是NSMapTable功能比NSDictionary对象要多的功能就是可以设置key和value的NSPointerFunctionsOptions特性!其他的用法与NSDictionary相同.

推荐阅读更多精彩内容