Объектное копирование
Копирование объекта создает новый объект с тем же классом и свойствами как исходный объект. Вы копируете объект, когда Вы хотите свою собственную версию данных, которые содержит объект. Если Вы получаете объект откуда-либо в приложении, но не копируете его, Вы совместно используете объект с его владельцем (и возможно другие), кто мог бы изменить инкапсулированное содержание. При создании подкласса Вы могли бы рассмотреть позволение другим скопировать экземпляры Вашего класса. Обычно объект должен быть «copyable», когда это - объект значения — объект, основная цель которого состоит в том, чтобы инкапсулировать некоторые данные.
Требования для объектного копирования
Если его класс принимает, объект может быть скопирован NSCopying
протокол и реализации его отдельный метод, copyWithZone:
. Если класс имеет непостоянные и неизменные варианты, непостоянный класс должен принять NSMutableCopying
протокол (вместо NSCopying
) и реализация mutableCopyWithZone:
метод, чтобы гарантировать, чтобы скопированные объекты остались непостоянными. Вы делаете копию объекта путем отправки ему a copy
или mutableCopy
сообщение. Эти сообщения приводят к вызову надлежащего NSCopying
или NSMutableCopying
метод.
Копии объектов могут быть мелкими или глубокими. И мелкий - и глубокая копия приближается к непосредственно двойным скалярным свойствам, но разойдитесь в том, как они обрабатывают ссылки указателя, особенно ссылки на объекты (например, NSString *str
). В то время как мелкая копия копирует только ссылки на те объекты, глубокая копия копирует объекты, на которые ссылаются. Таким образом, если объект A мелко скопирован, чтобы возразить B, возразить, что B относится к той же переменной экземпляра (или свойство), что объект A относится к. Глубоко копирующие объекты предпочтены мелкому копированию, особенно с объектами значения.
Импликации управления памятью
Как создание объекта, копирование объекта возвращает объект с сохранить количеством 1. В управляемом коде памяти клиент, копирующий объект, ответственен за выпуск скопированного объекта. Копирование объекта подобно в цели сохранению объекта в тех обоих, выражают владение в объекте. Однако скопированный объект принадлежит исключительно новому владельцу, который может видоизменить его свободно, в то время как сохраненный объект совместно используется владельцами исходного объекта и клиентами, сохранившими объект.