Objective c 何时使用NSMutableDictionary而不是NSMapTable?

Objective c 何时使用NSMutableDictionary而不是NSMapTable?,objective-c,nsmutabledictionary,foundation,Objective C,Nsmutabledictionary,Foundation,NSMapTable似乎是NSMutableDictionary更强大、更灵活的近亲。它可以配置为在NSMutableDictionary中工作(复制键并保持值的强引用),在什么情况下我不应该使用NSMapTable?在99%的情况下,我更喜欢NSDictionary(和NSSet)。更多的抽象意味着更大的复杂性和更多的出错方式 我只在一种情况下使用NSMapTable(和NSHashTable)来存储弱引用。 我看不出它们还有什么好用 请注意,如果使用弱-弱、弱-强或强-弱绑定,NSMapTa

NSMapTable似乎是NSMutableDictionary更强大、更灵活的近亲。它可以配置为在NSMutableDictionary中工作(复制键并保持值的强引用),在什么情况下我不应该使用NSMapTable?

在99%的情况下,我更喜欢
NSDictionary
(和
NSSet
)。更多的抽象意味着更大的复杂性和更多的出错方式

我只在一种情况下使用
NSMapTable
(和
NSHashTable
)来存储弱引用。
我看不出它们还有什么好用

请注意,如果使用弱-弱、弱-强或强-弱绑定,NSMapTable有时不会释放键和对象

同样在NSMapTable.h中,您可以发现,当弱密钥被回收时,“条目不一定立即被清除”

+ (id)weakToStrongObjectsMapTable NS_AVAILABLE(10_8, 6_0); 
// entries are not necessarily purged right away when the weak key is reclaimed
+ (id)weakToWeakObjectsMapTable NS_AVAILABLE(10_8, 6_0); 
// entries are not necessarily purged right away when the weak key or object is reclaimed

主要是,使用NSMapTable还有很多方法可以让你一败涂地,而且对于99.9%的使用来说,这是不必要的复杂性。此外,还不清楚NSMapTable是否与NSMutableDictionary“兼容”,因此在很多情况下你可能无法使用它,并且会不断地来回切换。Mattt Thompson(来自NSHipster)有@HotLicks你如何用NSMapTable射击自己的脚?@Boon Regular
CFDictionary
。引用
NSMapTable
docs:…通常鼓励您对void*指针使用C函数API。。。或者我将它包装成一个
NSValue