1

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

例如:

- (void)viewDidLoad {

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

- (void)viewDidLoad {

    self.intX = 1;
    [super viewDidLoad];

}

- (void)dealloc {

    [myControl release];
    [super dealloc];
}
4

2 回答 2

2

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

这最好用

- (void)drawRect:(NSRect)dirtyRect

实际上,您正在将视图绘制到矩形中,但视图本身也在其中进行所有突出显示和子视图管理。

那么,您是否需要做一些在超类之前或之后会发生的事情,这是正常行为吗?

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

viewDidLoad更像是一个初始化器,通常与您的子类 ivars 比实际类本身更相关。但是,如果您的子类viewDidLoad正在影响子类视图的 ivars 或状态;您可能希望等到 super 之后,以免您的更改被吹走。

于 2011-03-22T17:17:02.890 回答
0

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

例如:

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

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

于 2011-03-22T17:23:49.703 回答