2009-09-28 42 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; 
} 

这可能并不像您想象的那么难得。直接调用方法比发送消息要快得多(这有助于在同一消息一遍又一遍地发送到同一对象的情况下)。

相关问题