Objective c 目标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

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

  • 什么是小鬼

  • 什么是msgSend函数


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