Все объекты, используемые в качестве ключей в словарях NS (Mutable), должны поддерживать протокол NSCopying, и эти объекты копируются, когда они используются в словаре.
Я часто хочу использовать более тяжелые весовые объекты в качестве ключей, просто чтобы сопоставить один объект с другим. Что я действительно имею в виду, когда я делаю это эффективно:
[dictionary setObject:someObject forKey:[NSValue valueWithPointer:keyObject]];
( "Когда я вернусь и снова отправлю вам этот тот же экземпляр ключевого объекта, получите мне то же значение".)
... Именно это я и делаю, чтобы иногда обойти этот дизайн. (Да, я знаю о NSMapTable на рабочем столе Cocoa, но, например, iPhone не поддерживает это.)
Но я действительно не понимаю, почему копирование ключа необходимо или желательно в первую очередь. Что он покупает для реализации или вызывающего?