Лучший способ определить, что UIViewController был загружен и имеет правильное представление? - PullRequest
15 голосов
/ 04 декабря 2008

При обращении к свойству представления UIViewController, он сначала проверяет, есть ли у него существующее представление, и возвращает его. Если нет, он загружает свой кончик или вызывает -loadView.

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

Если я переопределил -didReceiveMemoryWarning, как я могу определить, очищено ли представление? Насколько я понимаю, реализация по умолчанию проверяет, является ли self.view.superview == nil. Если это так, он очищает кэшированное представление. Конечно, он сначала проверяет, есть ли кэшированное представление, и если нет, то ничего не делает. Однако я, как подкласс, не могу вызвать self.view.superview, поскольку, если не представление, оно сгенерирует его.

Итак, как мне выяснить, существует ли _view? (Я не могу просто посмотреть на _view; я получаю ошибки при компоновке устройства).

Ответы [ 3 ]

67 голосов
/ 03 июля 2009

Начиная с iPhone OS 3.0, вы можете использовать метод isViewLoaded, чтобы посмотреть, загружено ли представление.

3 голосов
/ 04 декабря 2008

Я думаю, что в вашей ситуации лучше сделать что-то вроде:

- (void)setView:(UIView *)view
{
    if (!view)
    {
         // Clean up code here
    }

    [super setView:view];
}
0 голосов
/ 04 декабря 2008

Вы можете использовать object_getIvar () , чтобы получить значение без прохождения через метод доступа. По сути, он позволяет вам получить доступ к _view без необходимости ссылаться на него. С другой стороны, он может сломаться, если реальный ивар исчезнет или будет переименован. Традиционно это никогда не было реальной проблемой, но iPhone использует современную среду выполнения, которая не страдает от хрупких проблем базового класса, поэтому Apple может чувствовать себя более склонным к внесению подобных изменений.

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