我已经看到了这两种方式,[super methodName];作为方法中的第一行和最后一行。有没有最好的方法呢?
例如:
- (void)viewDidLoad {
[super viewDidLoad];
self.intX = 1;
}
- (void)viewDidLoad {
self.intX = 1;
[super viewDidLoad];
}
- (void)dealloc {
[myControl release];
[super dealloc];
}
答案 0 :(得分:2)
通常,在处理视图时,您需要考虑与子类将要进行的更改相关的标准行为。
最好用
说明- (void)drawRect:(NSRect)dirtyRect
有效地,您将视图绘制到rect中,但视图本身也在那里进行所有突出显示和子视图管理。
那么,你是否需要做一些在超级课程正常行为之前或之后会发生的事情?
在这些情况下,最好通过在超级调用之前和之后移动代码进行测试。它甚至可以产生一些行为理解,甚至不进行超级调用,看看它如何影响所做的事情。
viewDidLoad
更像是一个初始化者,通常与您的子类ivars相比,与实际的类本身更相关。但是,如果您的子类viewDidLoad
影响了ivars或子视图的状态;你可能想要等到超级之后才能让你的变化消失。
答案 1 :(得分:0)
在dealloc
中我们最后调用[super methodName];
,因为在释放超类之前你需要清理子类对象,否则它们将成为孤儿。
例如:
想想这个例子。它会对你有意义吗?
你将用你父亲的钱来获得良好的教育,然后你将开始赚钱(在你的问题中,在你创建自己的子类之前获得超类的好处)。在你不好的时候,首先你会浪费你的钱,慢慢地你可能会耗尽你父亲的钱(在dealloc方法中,释放子类的对象然后超级)。