2009-06-17 207 views
6

如果我首先调用超类的方法,或者最后调用这个方法有什么关系?例如是否在ObjectiveC中调用超类问题的方法?

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

    [super didReceiveMemoryWarning]; 
} 

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

    /* do a bunch of stuff */ 
} 

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

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

回答

6

典型可可约定:

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

因此,初始化,viewDidLoad等属于第一种情况。内存警告,viewDidUnload和dealloc属于第二种情况。

您还应该设计您的课程以遵循此约定。任何偏差应特别注意。

相关SO回答:

`[super viewDidLoad]` convention


补充: 的理由调用安装过程中的超级第一​​,是要确保一切都在你的地方扩展功能之前。推论是,当你释放时,你不希望任何你的子类中的超类ivars依赖在你有机会处理它们之前得到处理。

这对引用UI更新以及下面的注释中提到的有意义。

+0

您如何对该评估中的willRotateToInterfaceOrientation进行分类? – fnCzar 2009-06-17 20:32:06

6

它取决于功能,你可能想要在超类完成它的事情之后或之前做某件事。

例如,如果超类拥有一些UI元素,并且对其进行扩展,并且您的类将包含更多的UI元素。要获得适合整个对象的大小,您可能会调用超类来计算其元素的大小,然后将该大小添加到您添加的元素的大小。

否则就没有任何意义了 - 超类没有意识到你的元素,所以它会覆盖你的计算。这又取决于实施。

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

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