Передача наборов данных - PullRequest
8 голосов
/ 28 августа 2008

Вопрос, который обдумывал меня в течение последнего времени. Я в основном разработчик .net, который увлекается Objective-C для iPhone и Mac.

Как вы отправляете "наборы данных" между методами в target-c. Например, в C # вы можете заполнить пользовательский класс данными и передать их в список пользовательских классов типа. Например, если бы у вас был класс клиента, вы бы просто сделали что-то вроде:

List<Customer> customers = DataLayer.GetAllCustomers();

Единственный способ увидеть, как это можно сделать в obj-c, - это заполнить NSArray пользовательскими объектами? Это эффективный способ делать вещи? Любые другие рекомендации? Я использую sqlite в качестве базы данных / данных, которые я хочу вернуть.

1 Ответ

24 голосов
/ 28 августа 2008

Вы на правильном пути.

Классы коллекций Какао, которые имеют изменяемые и неизменяемые варианты:

  • NSArray: упорядочено, может содержать объект несколько раз
  • NSDictionary: неупорядочено, отображение ключей на значения, ключи скопированы
  • NSSet: неупорядочено, может содержать объект только один раз
  • NSCountingSet: неупорядочено, может содержать объект несколько раз

Неизменные варианты очень помогают с эффективностью. Стандартный шаблон для методов доступа классов, которые имеют изменяемые варианты, - копировать, а не сохранять. Это кодифицировано в механизме @property с помощью атрибута copy свойства:

// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end

Это означает, что если вы передадите изменяемый массив чему-то, что получит массив, он будет скопирован, а если вы передадите его другому, он будет скопирован снова. Хитрость заключается в том, что «копирование» неизменяемого объекта на самом деле просто сохраняет его, поэтому вы берете удар только для этой первой копии. Вы, вероятно, хотите, чтобы сделал копию в первый раз в любом случае, чтобы вы не передавали изменяемый массив чему-либо другому, а затем изменяли его за спиной того, чему вы его передали.

Что касается Какао в Mac OS X, я также настоятельно рекомендую вам взглянуть на Основные данные. Это альтернатива шаблону «набор данных», который вы могли бы использовать из .NET / ADO / и т. Д. С Core Data вы не «получаете всех клиентов», а затем передаете эту коллекцию. Вместо этого вы запрашиваете клиентов, которые вам интересны, и когда вы пересекаете отношения запрашиваемых объектов, другие объекты будут автоматически добавляться для вас.

Базовые данные также предоставляют такие функции, как визуальное моделирование ваших сущностей, автоматическая генерация методов получения и установки свойств, детальный контроль над миграцией из одной версии схемы в другую и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...