[super methodName]的位置;

时间:2011-03-22 16:51:27

标签: xcode super

我已经看到了这两种方式,[super methodName];作为方法中的第一行和最后一行。有没有最好的方法呢?

例如:

- (void)viewDidLoad {

    [super viewDidLoad];
    self.intX = 1;
}

- (void)viewDidLoad {

    self.intX = 1;
    [super viewDidLoad];

}

- (void)dealloc {

    [myControl release];
    [super dealloc];
}

2 个答案:

答案 0 :(得分:2)

通常,在处理视图时,您需要考虑与子类将要进行的更改相关的标准行为。

最好用

说明
- (void)drawRect:(NSRect)dirtyRect

有效地,您将视图绘制到rect中,但视图本身也在那里进行所有突出显示和子视图管理。

那么,你是否需要做一些在超级课程正常行为之前或之后会发生的事情?

在这些情况下,最好通过在超级调用之前和之后移动代码进行测试。它甚至可以产生一些行为理解,甚至不进行超级调用,看看它如何影响所做的事情。

viewDidLoad更像是一个初始化者,通常与您的子类ivars相比,与实际的类本身更相关。但是,如果您的子类viewDidLoad影响了ivars或子视图的状态;你可能想要等到超级之后才能让你的变化消失。

答案 1 :(得分:0)

dealloc中我们最后调用[super methodName];,因为在释放超类之前你需要清理子类对象,否则它们将成为孤儿。

例如:

想想这个例子。它会对你有意义吗?

你将用你父亲的钱来获得良好的教育,然后你将开始赚钱(在你的问题中,在你创建自己的子类之前获得超类的好处)。在你不好的时候,首先你会浪费你的钱,慢慢地你可能会耗尽你父亲的钱(在dealloc方法中,释放子类的对象然后超级)。