Когда я могу распределять и инициировать объекты в программировании iPhone с помощью Objective-C? - PullRequest
1 голос
/ 01 февраля 2010

Иногда, когда я программирую для iPhone, я задаюсь вопросом, когда вам нужно выделять и инициализировать объекты, а когда нет.Когда вы используете элементы управления пользовательским интерфейсом, кажется, что вам не нужно это делать.Это правда и почему?

(Предположим, что они были объявлены в .h контроллера представления.)

Пример:

label1.text = @"Hello";

против

label1 = [[UILabel alloc] init];
label1.text = @"Hello";

Это потому, что я использую Interface Builder?Должен ли я сделать это, если я напишу наш графический интерфейс в коде?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2010

Ваша путаница связана с файлом NIB - файл NIB - это в основном замороженный объектный граф (то есть объект с дочерними объектами, у которого есть другие дочерние элементы и т. Д.). Когда вы загружаете этот NIB-файл, среда выполнения вызывает все выделенные элементы и элементы для , чтобы они были уже созданы.

Если вы хотите создать объект, который ранее не был указан в файле NIB, тогда вам нужно alloc / init.

2 голосов
/ 01 февраля 2010

В основном вам нужно распределить / инициализировать ВСЕ объекты, кроме статических строк, как указано выше.Даже когда вы используете вспомогательные методы, такие как + [NSString stringWithFormat: ...], за кулисами все еще происходит выделение и инициализация.Эти удобные методы обычно просто выполняют alloc и init, а затем добавляют -autorelease, чтобы вам не пришлось беспокоиться об очистке.

Если вы просто создаете временный объект, иесть удобный метод, который подходит, используйте его.Если вы хотите, чтобы ваш объект оставался рядом, и есть удобный метод, обычно его можно вызвать и добавить -retain или просто использовать alloc / init.

Очевидно, что если нет удобного метода, используйте alloc / init.

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