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

В книге

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

есть

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

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам