Зачем использовать бесплатные мосты для коллекций с пользовательской семантикой управления памятью?
В книге
Эффективный 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
.)