структура или класс - PullRequest
6 голосов
/ 30 июня 2011

Я разрабатываю приложение для iPhone 3.1.3.

У меня есть класс, называемый Object2D, с полями и методами;которые представляют форму.Object2D имеет поле, представляющее его размер, и другое поле, представляющее его тип.

Теперь мне нужен еще один класс с именем Pattern, который представляет собой набор фигур.В Pattern у меня будет множество фигур.Из этих фигур мне нужен только их размер, их тип и их расположение внутри шаблона, мне не нужен какой-либо метод.

Мне интересно, что лучше иметь новую структуру, которая представляет форму, а не использоватьObject2D class.

Я спрашиваю об этом, потому что думаю о производительности памяти.Я не уверен, но struct меньше, чем классы, и, возможно, лучше использовать их вместо классов.

Что вы думаете?

Ответы [ 2 ]

20 голосов
/ 30 июня 2011

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

Большая разница в том, как вы можете их использовать. Объекты могут иметь методы и иерархии и взаимодействовать с остальной частью Какао. Со структурами вам нужно создавать пользовательские функции для каждого типа структуры или собирать псевдообъектную систему. Кроме того, произвольные структуры плохо взаимодействуют с остальной частью Какао (Touch). Например:

  • Если вы храните объекты в них, вы должны быть очень осторожны, чтобы правильно управлять собственной памятью
  • Вы не можете сохранить их в NSArrays без создания обертки объектов (поскольку NSArray - это массив объектов)
  • Вы не можете подключить структуры в Интерфейсном Разработчике - он ничего о них не знает
  • Вы не можете использовать KVO или KVC со структурами

В общем, если вы работаете с какао-подобной средой, объекты являются хорошим выбором по умолчанию. Используйте структуры, как только вы решили, что они вам действительно нужны.

4 голосов
/ 30 июня 2011

Классы Objective C на самом деле являются структурами, и, если переменные экземпляра расположены в том же порядке, что и члены структуры, единственное различие в размере - это 4 или 8 байтов NSObject '* 1002.* variable.

ПРИМЕЧАНИЕ. В приведенном выше ответе предполагается использование устаревшей среды выполнения Objective C без использования директив @property и @synthesize, которые потенциально могут повлиять на их размер.

...