这很简单,让我发疯,我找不到答案。
方法如何引用调用它的实例?
示例:在某种alpha类方法中,我有“[bravo charley]”
我想让charley方法做“[alpha-instance delta];”用特殊的alpha实例做了“[bravo charley]”。但查理对alpha或其实例一无所知。
换句话说,如何从alpha-instance中的方法调用的charley方法中获取对alpha-instance的引用?
我可以做类似
的事情in bravo.h:
-(id) charley:(id)invoker;
in alpha.m:
[bravo charley:self];
然后“[invoker delta];”在查理方法中,但这看起来很难看。
答案 0 :(得分:11)
实现此目的的常用习惯是传递一个名为sender
的参数和消息,或多或少类似于您的示例。这是例如如何指定绑定为用户界面动作的方法 - 例如
-(IBAction)doTheThing:(id)sender
没有内置的方法来获取发送消息的对象,而且很少需要它。
答案 1 :(得分: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;
}
这可能不像你想象的那么罕见。直接调用方法比发送消息要快得多(这有助于在同一个消息被反复发送到同一个对象的情况下)。