2011-09-10 56 views
1

假設我有一個擴展的UIViewController定製控制器稱爲MyCustomUIViewController:的MonoTouch:重寫UIViewController的方法,正確的方法

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

現在我要重寫這樣的方法:

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

    //- other stuff here 
} 

是它需要調用base.ViewDidLoad()或不?我在哪裏必須調用基本方法?自定義代碼之前或之後(即其他的東西)?我看過很多樣例,其中的基本方法放在做了什麼甚至省略之後。

預先感謝您。問候。

回答

1

是的,當你覆蓋你需要調用基地。呼叫基地確保您不會將現在或未來的蘋果短路。另外,這是一個很好的習慣,因爲在更深的繼承中,你也可以短路一些需要調用的代碼。

通常情況下,您首先調用base。

例如,它是等價的,如果這種典型的Objective-C代碼:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

    // ... 
1

viewDidLoad中的缺省實現是空的,所以,如果你做出base.ViewDidLoad(沒關係)調用開始,更不用說你打電話的地方,如果你選擇了。

插入對基本實現的引用的一個原因是要確保您的代碼仍然正常工作,如果Apple重新設計viewDidLoad以使其確實執行某些操作。在這種情況下,我認爲你最好在你的ViewDidLoad實現的開始部分放置這個調用,但這種情況發生的可能性很小。

+2

基於這個原因調用base是個很好的習慣 - 因爲面向對象的封裝,你不應該繼續假設base不做任何事情。除此之外,還有一些情況是你有更深的繼承,並且總是調用base來確保你不會短路一些代碼。 – bryanmac

+0

@bryanmac非常好的一點!我所缺少的是ViewDidLoad的默認實現爲空。因此,如果'MyCustomUIViewController'直接擴展'UIViewController',則可以省略基本調用。 –