Intereting Posts
IBOutlet подпрограммы UITableViewCell (NULL) Проверьте приложение, которое я отправляю в AppStore Если я удалю устройство из моей учетной записи разработчика, это повлияет на профиль подготовки? Нажмите окно, когда выбран ряд Facebook SDK для iOS, fbDidLogin никогда не вызывается в приложении multi nib UITableViewCells не используется повторно при прокрутке Внедрение категории UIViewController Камера XCode 6 Table View, работающая от экрана «Запустить изображения» в «Резюме» для локализованного Default.png Как удалить спаренные устройства Bluetooth в iOS? Кто должен делать серверные вызовы или локальную загрузку файлов на стороне клиента MVC? Существуют ли недокументированные причины, которые могут вызвать kCLErrorRegionMonitoringFailure при попытке контролировать регионы? Как фильтровать мониторы сердечного ритма Xcode: проверьте подключение к сети Комплект Xamarin – Include Settings в некоторых конфигурациях сборки

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

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

Например, для 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 и т. Д.

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