Где инициализировать что-то ОДИН РАЗ в UIViewController - PullRequest
6 голосов
/ 13 июня 2011

У меня есть подкласс UIViewController, и я пытаюсь выяснить, что следует переопределить, чтобы я мог запускать некоторый код инициализации только один раз для экземпляра объекта.

Метод viewDidLoad может показаться очевидным ответом, но проблема в том, что viewDidLoad может запускаться более одного раза, если контроллер сбрасывает представление из-за предупреждения памяти. Методы initWithNibName:bundle:, init и initWithCoder: также кажутся хорошим выбором, но какой из них следует переопределить? awakeFromNib метод является еще одним соображением, но, похоже, он не выполняется в моем контроллере представления.

Есть ли способ сделать это, что мне не хватает?

Ответы [ 3 ]

5 голосов
/ 13 июня 2011

Назначенный инициализатором UIViewControllers метод, который должны вызывать все остальные инициализаторы, равен -initWithNibName:bundle:.Если вы хотите что-то инициализировать при создании контроллера представления, переопределите этот метод.

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

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

Возможно, вы все еще можете использовать viewDidLoad, но внутри можете использовать статическое логическое значение, чтобы увидеть, были ли вы там уже.

static BOOL didInitialize = NO;
if (didInitialize == YES)
    return;

didInitialize = YES;
/* initialize my stuff */
2 голосов
/ 13 июня 2011

А как насчет +(void)initialize?Это инициализатор класса, который, как я понимаю, iOS когда-то вызывает для вас.

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