Нет, что-то не встроено в рамки для этого. Коллекции какао поддерживают мелкие копии (с помощью методов copy
или arrayWithArray:
), но даже не говорят о концепции глубокого копирования.
Это связано с тем, что становится трудно определить «глубокое копирование» по мере того, как начинается содержимое ваших коллекций, включая ваши собственные пользовательские объекты. Означает ли "глубокая копия" каждый объект в графе объектов уникальную ссылку относительно каждого объекта в исходном графе объектов?
Если бы был какой-то гипотетический протокол NSDeepCopying
, вы могли бы настроить его и принимать решения по всем вашим объектам, но, к сожалению, его нет. Если вы управляете большинством объектов в своем графике, вы можете создать этот протокол самостоятельно и реализовать его, но при необходимости вам потребуется добавить категорию в классы Foundation.
@ Ответ AndrewGrant, в котором предлагается использовать архивирование / разархивирование с использованием ключа, - это нецелесообразный, но правильный и чистый способ достижения этого для произвольных объектов. Эта книга даже заходит так далеко, что предлагает добавить категорию ко всем объектам, которая делает именно это для поддержки глубокого копирования.