Цель C Класс или структура? - PullRequest
7 голосов
/ 02 апреля 2010

У меня есть класс Song со свойствами Title, Key, Artist и т. Д. Нет методов. Я перебираю базу данных информации о песне и создаю для каждого из них объект Song, заполняя свойства, а затем сохраняю объекты Song в NSArray.

Тогда я подумал, почему бы просто не иметь структуру Song со всеми теми же свойствами вместо класса Song. Это исключит файлы классов, строку #import Song в файле .m используемого класса и необходимость выделять, инициализировать, выпускать.

С другой стороны, мне нужно было бы поместить определение структуры в каждый класс, который может в нем нуждаться. (Если есть какое-то глобально доступное местоположение - есть?) Кроме того, структура может быть сохранена в NSArray?

Ответы [ 3 ]

19 голосов
/ 02 апреля 2010

Я бы сделал это с классом. Структура не может быть сохранена в NSArray (или любом другом классе контейнеров в этом отношении), если вы не заключите ее в NSValue, что может быть сделано, но немного сложновато.

Кроме того, как вы указали, вы должны где-то определить структуру. Обычным способом было бы определить его в файле заголовка (.h) так же, как для класса. Так что там нет никакой «выгоды» от структуры.

6 голосов
/ 02 апреля 2010

Вы не можете хранить структуры в NSArray (посмотрите на сигнатуры его методов - они все принимают и возвращают объекты). Но помимо этого, как я сказал в ответе на другой недавний вопрос , помещать объекты в структуры - это почти всегда плохая идея. Объекты должны быть сохранены и освобождены, а структурам не нужен связанный с ними код, чтобы гарантировать, что это произойдет в нужное время. Это имеет больше смысла как модельный объект.

2 голосов
/ 02 апреля 2010

Это может пойти обоими путями, но почему бы не отделить ваши проблемы и сохранить их в своем собственном файле класса? Кроме того, это больше соответствует принципу единой ответственности SOLID. Зачем давать вашему основному файлу еще одну причину для изменения? Прекрати это.

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