簡體   English   中英

Objective-C方法如何引用調用它的對象?

[英]How can an Objective-C method refer to the object that invoked it?

這是如此簡單,它使我發瘋,以至於我找不到答案。

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

示例:在某些類alpha的方法中,我有“ [bravo charley]”

我想讓charley方法執行“ [alpha-instance delta];” 與執行“ [bravo charley]”的特定alpha實例。 但是查理對alpha或其實例一無所知。

換句話說,如何從由alpha-instance中的方法調用的charley方法中獲取對alpha-instance的引用?

我可以做類似的事情

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

然后是“ [invoker delta]”; 在查理方法中,但這看起來很難看。

完成此操作的常見習慣是在消息中傳遞一個稱為sender的參數,大致像您的示例一樣。 例如,這就是如何指定綁定為用戶界面動作的方法-例如

-(IBAction)doTheThing:(id)sender

沒有內置的方法來獲取發送消息的對象,並且很少需要它。

為了明確起見,一個方法不一定總是被另一個對象調用,因此運行時無論如何也無法可靠地提供此類信息。 例如,


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;
}

它可能並不像您想的那樣稀有。 直接調用方法比發送消息要快得多(在反復向同一對象發送相同消息的情況下,這很有幫助)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM