[Runtime]-发送消息

1:任何方法调用的本质:xcode

发送一个消息,用Runtime发送消息,OC底层的实现就是使用Runtime去实现的.测试

 

2:怎样验证:方法调用,是否真的是转化为消息机制呢?ui

> 01-最终生成消息机制,是编译器作的事情
> 02-若是想看最终代码,须要把当前代码从新编译,使用xcode编译器:clang编译器去从新编译就能够看到spa

   使用clang编译器去查看最终的消息机制代码步骤?命令行

   >: 打开xcode新建工程-->选择OS X、Application-->Command Line Tool-->建立一个命令行工程
   >: 而后在main.m文件中,建立对象,如:
 code

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        id objc = [NSObject alloc];
        objc = [objc init];
    }
    return 0;
}

   >: 打开终端:进入该工程中的目录下,main.m的上一级目录,cd +(目录下)对象

   >:使用这个命令:clang -rewrite-objc main.m  ,就会在main.m同级目录下生成一个main.cpp文件,打开双击就能够看到最终的代码:按住command + f--->搜索autoreleasepool-->就能够看到建立对象的那两行代码的消息机制代码编译器

 

3:根据以上论证,咱们能够本身测试使用,具体步骤?it

> 使用Runtime运行时第一步:导入头文件 :#import <objc/message.h>io

#import <objc/message.h>

> xcode6以前,苹果容许咱们使用objc_msgSend,并且是有参数提示的;xcode6,苹果再也不推荐咱们使用runtime

解决参数提示配置:工程文件-->BuildSetting-->搜索msg-->修改成NO便可

测试代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    /**
     * 1:使用运行时去测试第一步:导入头文件  #import <objc/message.h>
     * 2:xcode6以前,苹果容许你使用objc_msgSend(),并且有参数提示
         xcode6,苹果不推荐咱们使用runtime
     解决参数提示配置:工程文件-->buildSetting-->搜索msg-->修改成NO便可
     */
    
    
    /**
     *  1:类方法本质:类对象调用[NSObject class]
     */
    
    // id:谁发送消息
    // SEL:发送什么消息
    //id objc = [NSObject alloc];
    id objc = objc_msgSend([NSObject class], @selector(alloc));

    //objc = [objc init];
    objc = objc_msgSend(objc, @selector(init));
    
}

 

 

意见反馈邮件:1415429879@qq.com

欢迎大家的阅读和赞扬、谢谢

相关文章
相关标签/搜索