Вопрос

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

Как вы отправляете "наборы данных" между методами в objective-c.Например, в C # вы можете заполнить пользовательский класс данными и передавать их по кругу в виде списка типа custom class.НАПРИМЕР, если бы у вас был класс customer, вы бы просто сделали что-то вроде:

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

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

Это было полезно?

Решение

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

Классы коллекции Cocoa, все из которых имеют изменяемые и неизменяемые варианты, следующие:

  • NSArray ( скопление ):упорядоченный, может содержать объект несколько раз
  • Справочник:неупорядоченный, сопоставляющий ключи значениям, ключи копируются
  • NSSet:неупорядоченный, может содержать объект только один раз
  • NSCountedSet - набор данных:неупорядоченный, может содержать объект несколько раз

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top