Вы на правильном пути.
Классы коллекций Какао, которые имеют изменяемые и неизменяемые варианты:
- NSArray: упорядочено, может содержать объект несколько раз
- NSDictionary: неупорядочено, отображение ключей на значения, ключи скопированы
- NSSet: неупорядочено, может содержать объект только один раз
- NSCountingSet: неупорядочено, может содержать объект несколько раз
Неизменные варианты очень помогают с эффективностью. Стандартный шаблон для методов доступа классов, которые имеют изменяемые варианты, - копировать, а не сохранять. Это кодифицировано в механизме @property
с помощью атрибута copy
свойства:
// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end
Это означает, что если вы передадите изменяемый массив чему-то, что получит массив, он будет скопирован, а если вы передадите его другому, он будет скопирован снова. Хитрость заключается в том, что «копирование» неизменяемого объекта на самом деле просто сохраняет его, поэтому вы берете удар только для этой первой копии. Вы, вероятно, хотите, чтобы сделал копию в первый раз в любом случае, чтобы вы не передавали изменяемый массив чему-либо другому, а затем изменяли его за спиной того, чему вы его передали.
Что касается Какао в Mac OS X, я также настоятельно рекомендую вам взглянуть на Основные данные. Это альтернатива шаблону «набор данных», который вы могли бы использовать из .NET / ADO / и т. Д. С Core Data вы не «получаете всех клиентов», а затем передаете эту коллекцию. Вместо этого вы запрашиваете клиентов, которые вам интересны, и когда вы пересекаете отношения запрашиваемых объектов, другие объекты будут автоматически добавляться для вас.
Базовые данные также предоставляют такие функции, как визуальное моделирование ваших сущностей, автоматическая генерация методов получения и установки свойств, детальный контроль над миграцией из одной версии схемы в другую и т. Д.