Objective c 目标C问题
我是objective-c的新手,我有一些问题:Objective c 目标C问题,objective-c,Objective C,我是objective-c的新手,我有一些问题: 什么是小鬼 什么是msgSend函数 IMP是一个实现指针,它基本上是一个钩子,用于确定在收到消息时运行什么(如foo-length)。你通常不需要它们,除非你情绪低落,浑身脏兮兮的;与选择器打交道通常更容易 6.1什么是小鬼 It's the C type of a method implementation pointer, a function 指针 到实现Objective-C方法的函数。它被定义为 返回id并接受两个隐藏参数se
IMP是一个实现指针,它基本上是一个钩子,用于确定在收到消息时运行什么(如foo-length)。你通常不需要它们,除非你情绪低落,浑身脏兮兮的;与选择器打交道通常更容易 6.1什么是小鬼
It's the C type of a method implementation pointer, a function
指针
到实现Objective-C方法的函数。它被定义为
返回id并接受两个隐藏参数self和_cmd:
typedef id (*IMP)(id self,SEL _cmd,...);
6.2 How do I get an IMP given a SEL ?
This can be done by sending a methodFor: message :
IMP myImp = [myObject methodFor:mySel];
6.3 How do I send a message given an IMP ?
By dereferencing the function pointer. The following are all
equivalent :
[myObject myMessage];
or
IMP myImp = [myObject methodFor:@selector(myMessage)];
myImp(myObject,@selector(myMessage));
or
[myObject perform:@selector(myMessage)];
摘自本手册第6.1节
至于msgSend,这是在另一个对象上调用远程消息的方式;objc_msgSend(foo,@selector(bar))与[foo-bar]大致相同。但这些都是低级的实施细节;您很少(如果有)需要对目标C代码使用扩展调用,因为您可以使用@selector来获取方法,而使用performSelector:在任何对象上调用它