Передача вокруг наборов данных

голоса
8

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

Как вы идете об отправке «наборы данных» между методами в Objective-C. Например, в C # вы можете заполнить пользовательский класс с данными и передавать его в Списке типа пользовательского класса. Например, если у вас есть класс клиента вы бы просто сделать что-то вроде:

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

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

Задан 27/08/2008 в 19:45
пользователем
На других языках...                            


1 ответов

голоса
24

Вы находитесь на правильном пути.

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

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

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

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

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

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

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

Ответил 27/08/2008 в 20:03
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more