2011-03-22 56 views
1

我已经见过这种方式,用[super methodName];作为方法的第一行并作为最后一行。有没有最好的方法来做到这一点?[super methodName]的放置位置;

例如:

- (void)viewDidLoad { 

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

- (void)viewDidLoad { 

    self.intX = 1; 
    [super viewDidLoad]; 

} 

- (void)dealloc { 

    [myControl release]; 
    [super dealloc]; 
} 

回答

2

一般来说,你要考虑到相关标准的行为,你的子类将采取改变看法的时候。

这最好用

- (void)drawRect:(NSRect)dirtyRect 

有效地要绘制您的视图为矩形,但认为自己是做所有的高亮和子视图管理在那里很好的说明。

那么,你需要做一些事情发生在超类之前或之后吗?

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

viewDidLoad更像是一个初始化程序,通常与您的子类ivars比实际的类本身更相关。但是,如果您的子类别viewDidLoad正在影响子类视图的状态或状态;你可能想等到超级后才能让你的改变不被吹走。

0

dealloc我们终于打电话[super methodName];,因为在发布超类之前你需要清理子类对象,否则它们会变成孤儿。

例如:

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

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