Зачем использовать бесплатное соединение для коллекций с настраиваемой семантикой управления памятью?

В книге

Эффективный Objective-C 2.0: 52 конкретных способа улучшить вашу программу для iOS и OS X

есть

Правило 49. Используйте бесплатные соединения для коллекций с настраиваемой семантикой управления памятью

В этой главе в основном объясняется важность бесплатного соединения на примере решения проблемы, когда ключи копируются в NSDictionary, а значения сохраняются.

В нем говорится, и я цитирую следующее:

Что делать, если объекты, которые вы хотите использовать в качестве ключей, невозможно скопировать?

Мой вопрос в том, что если все объекты в Objective-C являются подклассами NSObject, который с самого начала реализует методы копирования, как могут быть объекты, которые нельзя копировать? Есть ли реальные сценарии, которые требуют этой ситуации?


person PinkiePie-Z    schedule 30.10.2017    source источник


Ответы (1)


NSObject реализует -copy для удобства с точки зрения -copyWithZone: NSCopying. Если ваш объект не соответствует NSCopying и не реализует -copyWithZone:, вызов -copy для него вызовет исключение. Неправда, что все объекты реализуют копирование, поэтому вам нужно сохранить их вместо копирования. (Дополнительную информацию о -copy.)

person Itai Ferber    schedule 30.10.2017
comment
Спасибо за ваше объяснение. Это очень помогает! - person PinkiePie-Z; 31.10.2017