Что СУПЕР в Objective-C - iOS - PullRequest
       6

Что СУПЕР в Objective-C - iOS

3 голосов
/ 28 февраля 2012

У меня небольшой вопрос о том, что означает супер в xcode. Например, у меня есть следующий код. Будет ли это работать, если я сначала скажу [super dealloc] в методе dealloc? Или супер всегда должен стоять последним? Что именно супер - я знаю, что это супер класс, но это родительский класс или?

Это файл .h для этого класса

@interface TwitterTableViewController : PullRefreshTableViewController<TweetDelegate>

Это некоторый код из класса .m для вышеуказанного интерфейса

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
    // Custom initialization
}
return self;
}

- (void)dealloc
{

[self.twitterManager release];
[tweets release];
[lastRefreshedLabel release];
[super dealloc];

}

Я все проверил и пока не имею удовлетворительных знаний. Если кто-то может объяснить это в терминах непрофессионалов, было бы лучше. спасибо

Ответы [ 6 ]

5 голосов
/ 28 февраля 2012

super вызывает реализацию класса super . В вашем случае это будет PullRefreshTableViewController.

Что касается того, следует ли вам вызывать super до / после вашего собственного кода, это действительно зависит от того, чего вы хотите достичь, переопределив метод.

В случае dealloc посмотрите на этот вопрос , как упоминалось Ник Булл .

3 голосов
/ 28 февраля 2012

Суперкласс можно рассматривать как «родительский класс», да, если вы имеете в виду. [super dealloc] вызывает реализацию метода dealloc класса super / parent текущего объекта (или класса, если вы вызываете его из метода класса).

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

2 голосов
/ 28 февраля 2012

В дополнение к существующим здесь ответам информация в этом ответе может помочь вам решить, когда звонить «супер».

Методы, которые вызываются, когда дочерний объект / представление / viewcontroller создается / инициализируется, первое, что вы делаете, это вызываете super (то есть, если вы хотите вызвать его).

Когда дочерний объект / view / viewcontroller уничтожен / удален, вы вызываете super в конце метода.

например:

// methods called when the you are loading/showing with the view controller
    -(void)viewDidLoad {
        [super viewDidLoad];
        //call super and then all your code goes here
    }

    -(void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        //call super and then all your code goes here
    }

// methods called when the you are done with the view controller
    - (void)viewWillDisappear:(BOOL)animated{
        //all your code goes here and then call super
        [super viewWillDisappear:animated];
    }
    - (void)viewDidUnload {
        //all your code goes here and then call super
        [super viewDidUnload];
    }

Аналогично, для -dealloc супер вызывается в конце, для -init супер вызывается в начале.

Надеюсь, это демистифицирует Супер.

1 голос
/ 28 февраля 2012

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

1 голос
/ 28 февраля 2012

super указывает, что сообщения должны отправляться в родительский класс ( супер класс) текущего класса. Так как вы наследуете от PullRefreshTableViewController, вот куда они будут отправлены.

1 голос
/ 28 февраля 2012

super означает суперобъект / aka отец класса, которому вы препятствуете, который расширяет

, в вашем случае это PullRefreshTableViewController

такого рода поведениеВ основе всех объектно-ориентированных языков, таких как obj-c.

, в случае, если вы анализируете суперкласс, есть метод с именем

 -(UITableviewStyle *) initWithStyle:style
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...