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