В чем разница между помещением кода под viewDidLoad и под супер viewDidLoad?
Порядок выполнения. Ваша реализация будет выполнена после выполнения (-ов) суперкласса. Некоторые реализации ничего не делают (детализация должна быть абстрагирована), но их не повредит (исключения должны быть задокументированы).
Если вы ищете конкретные различия, которые могут сильно различаться в зависимости от иерархии классов. Вы должны просто игнорировать эти детали реализации. Достаточно сказать, что реализации суперкласса могут быть не готовы обрабатывать вашу инициализацию до тех пор, пока реализация суперкласса не будет выполнена.
Эмпирическое правило (исключения должны быть документально оформлены):
- При инициализации/установки, запуска реализации суперкласса первым.
- При разрыве/очистке запустите исполнение суперкласса последним.
- Для других категорий вы, как правило, хотите сначала реализовать реализации суперкласса.
Обратите внимание на симметрию первых двух точек в ваших реализациях. Кроме того, реализация суперкласса не сможет обрабатывать ваши запросы (правильно) после запуска реализации суперкласса.
Detailing super
: Ваши объекты существуют в иерархии объектов. Суперкласс - это объект, из которого вы получили. Пример:
NSObject >
UIResponder >
UIViewController >
UICollectionViewController
Предположим UICollectionViewController
реализован -viewDidLoad
. Его реализация вызовет реализацию super
, чтобы гарантировать выполнение всех реализаций в иерархии классов. Это похоже на инициализацию - когда инициализатор суперкласса вызывается в инициализаторах, гарантируя, что все инициализаторы в иерархии классов выполняются в правильном порядке. Аналогично, -dealloc
выполняется в обратном порядке (в ARC компилятор добавляет вызов к [super dealloc]
после выполнения вашей реализации).
Можете ли вы добавить образцы кода? Я не уверен, что вы имеете в виду, говоря «под». – bert
Все, что делает супер, это вызов реализации суперкласса метода, как вы сказали в своем вопросе. Это цель «супер». –
bert, я просто имел в виду, что в вашем классе obj-c сначала есть viewDidLoad(), а затем супер viewDidLoad прямо под ним. Код может идти между ними, то есть под первым вызовом viewDidLoad, а не под супер viewDidLoad, или как часть реализации super viewDidLoad. – cheznead