在 NS(Mutable)Dictionaries 中用作键的所有对象都必须支持 NSCopying 协议,并且这些对象在字典中使用时会被复制。
我经常想使用较重的对象作为键,只是将一个对象映射到另一个对象。当我这样做时,我真正的意思是:
[dictionary setObject:someObject forKey:[NSValue valueWithPointer:keyObject]];
(“当我回来并再次将这个相同的关键对象实例交给你时,给我同样的值。”)
...这正是我有时最终会绕过这个设计所做的。(是的,我知道桌面 Cocoa 中的 NSMapTable;但例如 iPhone 不支持这个。)
但我真正不明白的是,为什么首先需要或需要复制密钥。它为实现或调用者买了什么?