Подтвердить что ты не робот

Когда мне следует позвонить супер?

Как лучше всего использовать [super ... any method name]. Недавно я обнаружил, что в dealloc [super dealloc] должен стоять в одном конце. Потому что любая переменная, которая не использовалась ранее, может быть заполнена мусором, если мы установим его после [super dealloc] Это редкая вещь, но это возможно. После этого у нас случится сбой в нашем приложении.

Итак, что лучше всего использовать супер метод, например, что лучше всего использовать для -(void)viewWillAppear:(BOOL)animated. Где лучшее место для [super viewWillAppear:(BOOL)animated] в начале тела или в конце?

4b9b3361

Ответ 1

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

- (void) setupSomething {
    [super setupSomething];
    …
}

- (void) tearDownSomething {
    …
    [super tearDownSomething];
}

Первый вид - это методы, такие как init…, viewWillAppear, viewDidLoad или setUp. Во-вторых, такие вещи, как dealloc, viewDidUnload, viewWillDisappear или tearDown. Это не сложное правило, оно просто следует из того, что делают методы.

Ответ 2

Просто проверьте соответствующие документы. Например, когда вызывать супер в переопределенных методах UIViewController:

didReceiveMemoryWarning. Вы можете переопределить этот метод (по мере необходимости) до освободить любую дополнительную память, используемую ваш контроллер просмотра. Если вы это сделаете, обязательно вызовите реализацию суперв какой-то момент, чтобы разрешить представление чтобы освободить его представление. [Значит, порядок не имеет значения.]

loadView: ваша пользовательская реализация этого метода не следует называть супер.

setEditing: анимированный. Этот метод должен ссылаться на реализацию суперперед обновлением его представления. [Значит, порядок имеет значение.]

viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear: Если вы переопределите этот метод, вы должны вызовите супер в какой-то момент вашего реализация. [Значит, порядок не имеет значения.]

dealloc: Если вы реализуете этот метод но строят ваше приложение для iOS 2.x, ваш метод dealloc должен выпускать каждый объект, но также установите ссылку на этот объект на nil перед вызовом супер. [Значит, порядок имеет значение.]

Вы поняли, что аналогичные правила для методов super в viewDidLoad и viewDidUnload не упоминаются? Потому что вам не нужно называть супер в них.

Ответ 3

В основном это зависит от того, нужны ли вашему подклассу вещи перед методом суперкласса или после. Или оба, в зависимости от ситуации.

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