Вопрос выделения памяти подклассов - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть основной вопрос о создании подкласса класса с объектами:

@ interface Myclass: NSObject {

UIImage * image;NSString * string;Система ParticleSystem *;Объект * объект;Object2 * obj2;}

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

Стоит ли просто создавать подклассы NSObject и переопределятьнеобходимые переменные, а не подклассы MyObject?

Спасибо, Оливер.

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Они занимают место, но только ценность указателя (4 байта на iPhone) для каждой переменной.

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

2 голосов
/ 20 сентября 2011

Каждая из этих переменных является указателем, поэтому они занимают место, необходимое для указания адреса памяти. (4 байта на iPhone)

Является ли iPhone OS 64-битной или 32-битной?

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

1 голос
/ 20 сентября 2011

Если у вас есть только указатели в определении класса (например, SomeClassName* somePointerName;), тогда каждый указатель занимает одну позицию указателя в каждом из ваших объектов (4 байта на iPhone).

Хотя иногда удобно делать то, что вы делаете, вы упускаете многие преимущества объектно-ориентированного программирования - вы просто используете управление хранением данных Objective-C при кодировании грубого языка C.

...