我是objective-c的新手,我有一些问题:
什么是IMP?
什么是msgSend函数?
答案 0 :(得分:3)
IMP是一个IMplementation指针,它基本上是一个钩子,用于确定收到消息后运行的内容(如foo长度)。你通常不需要它们,除非你沮丧和肮脏;处理选择器通常更容易。
6.1什么是IMP?
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)];
来自Objective C FAQ的第6.1节。
对于msgSend,这就是你在另一个对象上调用远程消息的方式; objc_msgSend(foo,@ selector(bar))与[foo bar]大致相同。但这些都是低级别的实施细节;你很少(如果有的话)需要使用对Objective C代码的扩展调用,因为你可以使用@selector来获取方法和performSelector:在任何对象上调用它。