Monotouch:覆盖UIViewController方法的正确方法

时间:2011-09-10 15:02:39

标签: objective-c ios xamarin.ios override

假设我有一个名为MyCustomUIViewController的自定义控制器,它扩展了UIViewController:

public class MyCustomUIViewController : UIViewController
{
   //- my class implementation
}

现在我要覆盖这样的方法:

public override void ViewDidLoad()
{
   base.ViewDidLoad();

   //- other stuff here
}

是否需要调用base.ViewDidLoad()?我在哪里必须调用基本方法?自定义代码之前或之后(即其他内容)?我已经看过许多样本,其中基本方法在做完之后放了甚至省略。

提前谢谢你。问候。

2 个答案:

答案 0 :(得分:1)

是的,当你覆盖时,你需要调用base。呼叫基站确保您不会短路苹果现在或将来可能拥有的东西。另外,这是一个好习惯,因为在更深层次的继承中,你还可以将一些需要调用的代码短路。

通常,您先调用base。

例如,如果这个典型的objective-c代码是等价的:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[self navigationItem] setTitle:@"Title"];

    // ...

答案 1 :(得分:1)

ViewDidLoad的默认实现是空的,因此如果你开始使用base.ViewDidLoad()调用并不重要,更不用说你拨打电话的地方了,如果你选择这样做的话。

如果Apple以 执行某些操作的方式重新设计viewDidLoad,那么插入对基本实现的引用的一个原因是确保您的代码仍能正常工作。在这种情况下,我认为你最好在ViewDidLoad实现的开头放置调用,但是这样的事情发生的可能性很小。