Objective-C问题

时间:2009-07-28 08:17:32

标签: objective-c

我是objective-c的新手,我有一些问题:

  1. 什么是IMP?

  2. 什么是msgSend函数?

1 个答案:

答案 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:在任何对象上调用它。