2009-09-28 174 views
1

這是如此簡單,它使我發瘋,我找不到答案。Objective-C方法如何引用調用它的對象?

一個方法如何引用調用它的實例?

實施例:在類的α一些方法,我有「[喝彩查理]」

我想有查理方法做「α-實例增量];」與做了「[bravo charley]」的alpha的特定實例。但查理對alpha或其實例一無所知。

換句話說,我如何從alpha實例中的方法調用的charley方法中獲得對alpha實例的引用?

我可以做類似

in bravo.h: 
    -(id) charley:(id)invoker; 
in alpha.m: 
    [bravo charley:self]; 

,然後 「[調用三角洲]。」在charley方法中,但這看起來很醜陋。

回答

11

實現此目的的常見習慣用法是在消息中傳遞一個名爲sender的參數,或多或少像您的示例中那樣。例如,這是如何指定作爲用戶界面動作被指定的方法 - 例如

-(IBAction)doTheThing:(id)sender 

有沒有內置的方式來抓住發送消息的對象,這是很少需要的。

+0

謝謝。難怪我找不到一種內置的方式來做到這一點! – 2009-09-28 14:14:11

1

爲了澄清,一個方法可能不總是被另一個對象調用,所以運行時無法可靠地提供這些信息。例如,


int main (int argc, char *argv[]) 
{ 
    SEL releaserSel = @selector(release); 

    NSObject *someObject = [[NSObject alloc] init]; 

    IMP releaserImp = [someObject methodForSelector:releaserSel]; 

    releaserImp (someObject, releaserSel); 

    // someObject has been released! 
    return 0; 
} 

這可能並不像您想象的那麼難得。直接調用方法比發送消息要快得多(這有助於在同一消息一遍又一遍地發送到同一對象的情況下)。

相關問題