我注意到,对于一个对象来说,NSDictionary
它必须符合NSCopying
.
为什么会这样?我会理解所有键都必须实现hash
,但为什么NSCopying
呢?
我注意到,对于一个对象来说,NSDictionary
它必须符合NSCopying
.
为什么会这样?我会理解所有键都必须实现hash
,但为什么NSCopying
呢?
因为密钥是复制的。您不希望将密钥存储为对您开始使用的同一对象的引用,对吗?如果d[myThing] = myValue
保留对可能可变实例的引用,那就太糟糕了myThing
。这意味着字典可能会在其背后发生变异。
NSDictionary
保证如果您使用某个键存储一个值,则x
该键是固定y
的,您可以使用等效键( )检索该值y.isEqual(x) == YES
。这样做只有两种可能性:
Apple 决定在大多数情况下,应对键更好。
如果您需要字典而不复制键(例如键不实现 NSCopying 或应对太昂贵),您可以使用NSMapTable。例如,您可以使用
[NSMapTable strongToStrongObjectsMapTable]
将键和值存储为强引用。