是否调用在的ObjectiveC超类物质的方法的时机?(Does the timing of cal

2019-07-28 20:27发布

不要紧,如果我叫的超类第一件事情还是在最后的方法是什么? 例如

-(void)didReceiveMemoryWarning {
   /* do a bunch of stuff */

   [super didReceiveMemoryWarning];
}

-(void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];

   /* do a bunch of stuff */
}

其他方法,如viewWillAppear中,willRotateToInterfaceOrientation等同样的问题

我要寻找有意义的差异,不只是风格,或哲学(虽然这些也欢迎)。

Answer 1:

典型的可可约定:

  1. 如果您正在执行建立,呼叫中超第一
  2. 如果您正在执行拆除,叫超级LAST

因此,初始化,viewDidLoad中,等属于第一种情况下。 存储器的警告,viewDidUnload和秋季的dealloc第二种情况下。

你也应该设计自己的课程遵循这一惯例。 任何偏差应特别指出。

相关SO回答:

`[超级viewDidLoad中]`惯例


补充:理呼叫建立过程中的超级第一​​,是要确保一切都在你的地方扩展功能之前。 其必然结果是,当你重新分配,你不希望任何超高德子类取决于要dealloced你有机会来处理它们。

这使得在下面的评论中指出感参考UI的更新。



Answer 2:

这取决于功能,你要么想要做的事父类做的事或之前后。

例如,如果超持有一些UI元素,你扩展它和你的类将举行一些UI元素。 为了让大小以适合你的整个对象,你可能会调用父类来计算其元素的大小,然后添加到该尺寸的大小,你添加的元素。

这是没有意义的,否则 - 超类是不知道你的元素,因此它会覆盖你的计算。 再次,这取决于实现。

还有的地方,你需要调用父类方法作为最后一件事具体情况:

-(void)dealloc
{
    ...
    [super dealloc];
}


文章来源: Does the timing of calling the method of the super class matter in ObjectiveC?