Obj-C: вызов суперкласса - PullRequest
4 голосов
/ 20 января 2011
- (void)viewDidAppear:(BOOL)animated {
    <CODE BEFORE>
    [super viewDidAppear:animated];
    <CODE AFTER>
}

Что правильно, поставить весь код до или после супер звонка? Он работает в обе стороны, но я не знаю, лучше ли дождаться звонка до конца или отправить его в начале?

ура эндо

Ответы [ 4 ]

9 голосов
/ 20 января 2011

Общее правило - сначала вызывать его при настройке (как здесь), а в конце вызывать при сносе.

3 голосов
/ 20 января 2011

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

1 голос
/ 20 января 2011

На самом деле это зависит от конкретного случая:

  • Для инициализации / очистки, очевидно, поскольку подкласс зависит от его состояния суперкласса, он должен инициализироваться после и выполнять очистку до.

  • В общем, вам может потребоваться добавить поведение как до, так и после супер-вызова, или даже полностью исключить супер-вызов (в конце концов, для этого и нужно переопределение метода).

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

0 голосов
/ 20 января 2011

Это зависит от того, что вы делаете. Можете ли вы предоставить некоторый контекст вокруг объектов, которые вы используете?

Например, в контексте уничтожения объекта вы вызываете super last.

- (void)dealloc {
[someObj release];

[super dealloc];

}

...