runtime本质-消息机制

  • 方法调用的本质,就是让对象发送消息。

  • objc_msgSend,只有对象才能发送消息,因此以objc开头.

  • 使用消息机制前提,必须导入#import

  • runtime的消息机制函数,在xcode6之后就没有提示参数,若需要有参数提示:点击工程文件 -> build Setting -> 搜索msg -> 不要严肃检查消息机制调用

  • 消息机制原理:对象根据方法编号SEL去映射表查找对应的方法实现

  • 调用流程:
    1.首先获取p对象的isa指针,就去isa指向类中查找
    2.根据传入SEL找到对应方法名(函数入口)
    3.直接调用函数实现


    runtime本质-消息机制_第1张图片
    Snip20151013_4.png
    // 创建person对象
    Person *p = [[Person alloc] init];

    // 调用对象方法
    [p eat];

    // 本质:让对象发送消息
    objc_msgSend(p, @selector(eat));

    // 调用多个参数方法,直接把参数放在后面就可以了
    //objc_msgSend(p, @selector(run:),2);

    // 调用类方法的方式:两种
    // 第一种通过类名调用
    [Person eat];
    // 第二种通过类对象调用
    [[Person class] eat];

    // 用类名调用类方法,底层会自动把类名转换成类对象调用
    // 本质:让类对象发送消息
    objc_msgSend([Person class], @selector(eat));

     // 编译:xcode会把OC的代码编译成最终代码,编译成c++,.cpp

你可能感兴趣的:(runtime本质-消息机制)