2014-04-24 121 views
0

在Objective-C中,我該如何調用對象的超類方法?調用超類方法

例如,假設我有一個對象「foo」的實例。

「foo」有一個被重寫的方法。我不想調用這個重寫方法。相反,我想調用foo對象實例上的原始方法。

你不能做:

[[instance super] super_method];據我所知。那麼我該怎麼做呢?

我知道我可以添加一個方法爲foo:

-(void) callsuper 
{ 
    [super super_method]; 
} 

做:

[foo callsuper];

其他方法嗎?我真的不想創建一個方法來做到這一點。

+2

爲什麼不直接調用'[super someMethod];' - 爲什麼要創建一個函數來調用它? –

+0

someMethod被foo的類覆蓋;他想通過傳遞子類的實現,並直接調用超類。真的有可能嗎?我很好奇這樣做的目的/好處是什麼? – PeterWong

+0

它是否有任何設計模式?我們可以直接調用[fooInstance fooClassMethod] ;. –

回答

0

關鍵字super爲您做到了這一點。這在-init方法中很常見。這是一個例子。

- (id)init { 
    if (self = [super init]) { 
     // custom initialization 
    } 
    return self; 
} 

在這種情況下,super關鍵字用於調用-init方法的這個類的父類實現。 super可用於您的超類實現的任何方法。