UIViewController разделяют на подклассы init, не названный при загрузке от пера

  1. shared_ptr (который работает хорошо),
  2. возвращают простой указатель и говорят пользователю Вашего класса, что это - их животное теперь, и они несут ответственность удалить его по окончании,
  3. реализуют 'freeAnimal (Животное*)' метод, который делает его очевидным, что удаление указателя животных требуется.

  4. альтернативный путь состоит в том, чтобы просто возвратить объект животных непосредственно, никакие указатели, никакие вызовы к новому. Конструктор копии удостоверится, что вызывающая сторона добирается, их собственное животное возражают, что они могут сохранить на "куче" или стеке, или копировать в контейнер, как они требуют.

Так:

class AnimalLister 
{
Animal getAnimal() { Animal a; return a; }; // uses fast Return Value Optimisation
};

Animal myownanimal = AnimalLister.getAnimal(); // copy ctors into your Animal object

RVO означает, что возврат объекта вместо указателя на самом деле быстрее (поскольку компилятор не создает новый объект и копирует его в объект вызывающей стороны, но использует объект вызывающей стороны непосредственно).

6
задан FreeAsInBeer 14 October 2011 в 18:58
поделиться

1 ответ

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

17
ответ дан 8 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: