ViewDidLoad / выгрузить сообщения в супер? - PullRequest
4 голосов
/ 27 января 2010

Я заметил код из других источников, где автор не добавил сообщения в super, показанные ниже. Я обычно добавляю их обоих, но мне просто было любопытно, что они делают, и правильно ли я всегда добавлять их?

-(void)viewDidLoad {
    //... other code
    [super viewDidLoad];
}

-(void)viewDidUnload {
    //... other code
    [super viewDidUnload];
}

* 1004 Гэри *

Ответы [ 4 ]

4 голосов
/ 27 января 2010

Я бы рекомендовал всегда отправлять UIViewController сообщения делегата на super (например, viewDidLoad, viewDidAppear). В некоторых случаях это не нужно, если вы, например, непосредственно подклассы UIViewController.

Некоторые классы, например UITableViewController, для этого требуются подклассы, так как задокументировано : «Вы можете переопределить loadView или любой другой метод суперкласса, но если вы обязательно вызовете реализацию метода суперкласса, обычно как первый вызов метода. "

Вызов super дает суперклассу возможность обработать событие (например, перезагрузить данные таблицы, оживить отмену выбора кнопки и т. Д.).

Само собой разумеется, вам не нужен явный метод, единственной задачей которого является вызов super.

1 голос
/ 27 января 2010

Цель этих методов состоит в том, чтобы уведомить ваш контроллер, когда представление, которым он управляет, завершило загрузку и разгрузку, если есть вещи, которые необходимо выполнить контроллеру в эти "интересные моменты".

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

0 голосов
/ 27 января 2010

Вы должны переопределять метод только тогда, когда вам нужно выполнить какое-то действие, поэтому я предполагаю, что ваш код действительно выглядит примерно так:

-(void)viewDidLoad {
    //do things that need to be done when the view is loaded
    [super viewDidLoad];
}

Если вы считаете родителя, если вашему представлению нужно что-то сделать, тогда вызовите [super viewDidLoad]; определенно в порядке. Однако, если вы посмотрите на документацию для viewDidLoad, там написано

Этот метод чаще всего используется для выполнения дополнительных шагов инициализации для представлений, загружаемых из файлов пера

Слово «дополнительный» здесь имеет решающее значение: это просто удобный метод. Это отличается от dealloc, где в документации прямо говорится, что при переопределении dealloc вы всегда должны заканчивать вызовом [super dealloc].

Если ваша реализация viewDidLoad и viewDidUnload действительно ничего не делает, кроме вызова super, вы должны удалить их: они ничего не добьются, кроме выполнения дополнительной работы для компилятора.

0 голосов
/ 27 января 2010

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

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