Класс Objective C или структура?

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

Затем я думал, почему не только имеют Песню структуры со всеми теми теми же свойствами вместо класса Песня. Выполнение так устранило бы файлы класса, #import строку Песни в.m файле класса использования и потребность к выделению, init, выпуску.

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

7
задан Matthew Groves 2 April 2010 в 16:36
поделиться

3 ответа

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

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

19
ответ дан 6 December 2019 в 06:36
поделиться

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

2
ответ дан 6 December 2019 в 06:36
поделиться

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

6
ответ дан 6 December 2019 в 06:36
поделиться