Intereting Posts
Почему UIDocumentInteractionController не представляет предварительный просмотр? Безопасность на уровне приложений на основе конфигурации Xcode стрельба одной анимацией за другой с задержкой iOS: изменить png в пункте панели iOS: массив UILocalNotification больше 64 (Swift) iOS: идентификатор электронной почты, а также оценка номера телефона в одном текстовом поле Как не «играть на догоняющем» на пропущенных сообщениях при подписке на канал с помощью PubNub iOS SDK? Использовать тип self как параметр функции в расширении UITests, соединяющий заголовочный файл, не добавляется в Xcode iOS, CoreText и Unicode Доступ к методам getter на суперклассе через lldb – ожидаемый метод getter не найден на объекте NSMutableArray, хранящийся в NSUserDefaults, не сохранит данные Есть ли способ сделать, как прогресс в iPhone в Apple Watch? разрешить одиночный URL-адрес из предложения в UITextView Прокрутка UITableView нарушается из-за NSTimer

Я не понимаю, когда мне нужно ссылаться на переопределенные методы или просто не требуется.

Я не понимаю, когда мне нужно ссылаться на переопределенные методы или просто не требуется.

Например, для dealloc необходимо

-(void) dealloc { ... [super dealloc]; } 

Для init также я думаю ..

 -(void) init { [super init]; .. } 

Как насчет viewWillAppear? и должен ли я вызвать супер метод до или позже моего пользовательского кода?

 (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } 

благодаря

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

Для примеров, которые вы указали: init : В документации указано:

В подклассах версий init необходимо включить код инициализации для классов, на которые они наследуют, через сообщение для супер: … Обратите внимание, что сообщение super вводится в код инициализации, добавленный в методе. Это упорядочение гарантирует, что инициализация продолжается в порядке наследования.

dealloc : В документации указано:

Подклассы должны реализовывать свои собственные версии dealloc, чтобы разрешить выпуск любой дополнительной памяти, потребляемой объектом, такой как динамически распределенная память для переменных данных или объектов, принадлежащих удаленному объекту. После выполнения освобождения класса, метод подкласса должен включать версии dealloc в суперклассе через сообщение для супер:

viewWillAppear: В документации указано:

Вы можете переопределить этот метод для выполнения пользовательских задач, связанных с представлением представления.
… Если вы переопределите этот метод, вы должны назвать super в какой-то момент своей реализации.

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

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

Я бы сказал, что это хорошая практика для того, чтобы ваш супер-init пошел первым, а ваш супер-dealloc – последним. Просто потому, что вы получаете доступ и теряете доступ, соответственно, к членам родительской функции.

Для такого метода, как viewWillAppear, это будет действительно зависеть от того, что я собираюсь попробовать и сделать. Но, скорее всего, я бы назвал супер метод первым, так как есть вероятность, что супер метод может переопределить то, что вы пытаетесь сделать в своем собственном методе viewWillAppear.

Ну, это зависит от того, хотите ли вы вызывать метод суперкласса или нет.

Если вы не называете это вообще, убедитесь, что знаете, что делаете. Возможно, вам придется заменить какой-то код, который будет выполнять метод суперкласса. Однако в редких случаях для этого могут быть веские причины.

Для dealloc я бы сказал, что последовательность не имеет значения.

Для init это довольно ключ. В большинстве случаев ваш код должен появиться после вызова [super init] . Особенно, когда вы хотите использовать любой метод суперкласса самостоятельно или когда вы хотите читать из свойств вашего суперкласса, тогда вам следует следовать коду. Однако даже здесь могут быть некоторые исключения.

Для viewWillAppear я полностью знаком с словами Chase. То же самое относится к viewDidLoad и т. Д.

Как правило, просто применяйте здравый смысл. Подумайте, какое значение имеет метод суперкласса и что он может изменить.