2012-05-15 2 views
0

Я чрезвычайно новичок в xcode и объективе c. Я понимаю, что мы объявляем только методы в файле .h, если хотим, чтобы он был общедоступным для других классов. Я также заметил, что мы можем использовать расширения класса в файле .m, чтобы сделать метод «приватным». Но каким образом некоторые методы не объявлены нигде (например, viewDidLoad и т. Д.)?Почему нет необходимости объявлять метод viewDidLoad, viewDidUnload и т. Д.?

Заранее спасибо.

ответ

5

Это методы суперкласса - UIViewController. Они объявлены в интерфейсе для этого класса. Когда вы наследуете этот класс, вы наследуете все его объявления и реализации методов.

+3

Я бы добавил, что viewDidLoad объявлен в UIViewController.h, который является частью структуры UIKit. UIKit включен в большинство шаблонов проектов по умолчанию, и если вы посмотрите в своих .h-файлах, вы, вероятно, увидите, что ссылка на UIKit.h указана. UIKit.h включает UIViewController.h. Вот как компилятор знает, что viewDidLoad существует, когда он компилирует ваш проект. – strings42

+0

Импорт файла заголовка заключается в том, как компилятор знает, что селектор существует, что необходимо, но недостаточно. Компилятор также должен знать, что ваш класс хочет ответить на этот селектор, иначе ваша реализация и/или любые пользователи вашего класса могут получить предупреждения или ошибки (в зависимости от ваших настроек - также автозаполнение не будет обрабатывать метод и т. Д.). Наследование - это то, что позаботится об этой части. Поэтому я думаю, что ответ Джима - важная часть. – abarnert

+0

Кроме того, '-viewDidLoad' - это метод делегата, и его селектор в основном жестко закодирован в AppKit/UIKit. Так как ваш собственный код не вызывает '-viewDidLoad' сам по себе, нет необходимости объявлять его в заголовке (т. Е. Делать это не будет подавлять никаких предупреждений или убедиться, что используется правильный тип возврата). – echristopherson

Смежные вопросы