Глубокое изменяемое копирование


Глубокое изменяемое копирование

Для того чтобы использовать наш новый подход, надо решить одну проблему. Класс NSDictionary соответствует протоколу NSMutableCopying, который возвращает NSMutableDictionary, но этот метод создает так называемую поверхностную копию (shallow сору). Это означает, что при вызове метода mutableCopy будет создан новый объект NSMutableDictionary, который имеет все объекты, которыми обладал исходный словарь. Это будут не копии, а одни и те же реальные объекты. Это может быть удобно, если, скажем, мы имеем дело со словарем для хранения строк, поскольку удаление значения из копии не будет затрагивать оригинал. Но так как у нас словарь не строк, а массивов, при удалении объектов из массивов в копии эти объекты будут удаляться и из массивов в оригинале, потому что и копия, и оригинал указывают на одни и те же объекты. В данном конкретном случае исходные массивы являются неизменными, так что на самом деле вы ничего из них не удалите, но мы хотели просто проиллюстрировать проблему.

Для того чтобы корректно решить проблему, мы должны иметь возможность делать глубокие изменяемые копии словаря с массивами. Это не так уж трудно сделать, но куда следует поместить эту функциональность?

Если вы сказали "в категорию", то отлично, вы на верном пути! Если вы этого не сказали — не волнуйтесь, требуется время, чтобы привыкнуть к языку программирования. Если вы забыли, напомним, что категории позволяют добавлять дополнительные методы к существующим объектам без наследования. Новички в Objective-C часто забывают о категориях, потому что в большинстве других языков программирования таких возможностей нет.

В окне проекта выберите папку Classes и нажмите комбинацию клавиш , чтобы создать новый файл. Когда появится помощник, выберите пункт ОШегвнизу слева. Ксожалению, для категорий шаблона файла нет, поэтому создадим пару пустых файлов для этой цели. Выберите пиктограмму Empty File и дайте первому файлу имя NSDictionary-MutableDeepCopy.h. Повторите это действие, дав в этот раз имя файлу NSDictionary-MutableDeepCopy .m.

СОВЕТ. Быстрый способ создания двух файлов, необходимых для данной категории, заключается в выборе шаблона NSObject subclass с последующим удалением содержимого файла. Этот вариант даст вам файлы заголовка и реализации, экономя один шаг.

Перейдите к файлу NSDictionary-MutableDeepCopy .m и добавьте следующую реализацию.
  • Дата: 2-12-2014, 21:51

Предыдущие статьи сайта:

Понравилась статья? Ставь лайки, рассказывай друзьям!



Отзывы о статье: Глубокое изменяемое копирование

Технологии, секреты и фишки Apple: Iphone, iPad, iPod