美文网首页
000-runtime简介

000-runtime简介

作者: 紫荆秋雪_文 | 来源:发表于2017-02-24 10:18 被阅读6次

    1、runtime的简介

    • Runtime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是 消息机制。
    • 对于 C语言,函数的调用在编译的时候会决定调用哪个函数。
    • 对于 OC的函数,属于 动态调用过程,在编译的时候并不能决定真正调用那个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。
    • 事实证明:
      • 在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错。
      • 在编译阶段,C语言 调用 未实现的函数 就会报错

    2、runtime的作用

    • 发送消息
      • 方法调用的本质,就是让 对象 发送消息
      • objc_msgSend,只有对象才能发送消息,因此以objc开头。
      • 使用 消息机制 前提,必须导入#import<objc/message.h>
      • 可是在终端中输入:clang -rewrite-objc main.m 来查看最终生成的代码

    3、runtime的体验

    • OC来创建一个对象
    //
    //  ViewController.m
    //  000-runtime(消息机制的体现)
    //
    //  Created by 紫荆秋雪 on 2017/2/24.
    //  Copyright © 2017年 Revan. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        //OC创建一个对象的实现如下
        NSObject *objc = [[NSObject alloc] init];
        NSLog(@"%@", objc);
    }
    
    @end
    
    
    • 下面来看如何使用runtime来实现同样一个创建对象的过程
      • 首先要导入:#import <objc/message.h>
      • 到工程 ->Build Settings搜索msg设置:Enable Strict Checking of objc_msgSend Calls 为 NO,这样在输入runtime的C语言方法时就会有代码提示
    //
    //  ViewController.m
    //  000-runtime(消息机制的体现)
    //
    //  Created by 紫荆秋雪 on 2017/2/24.
    //  Copyright © 2017年 Revan. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <objc/message.h>
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        //OC创建一个对象的实现如下
        //NSObject *objc = [[NSObject alloc] init];
        //NSLog(@"%@", objc);
        //1、首先要分配一个内存空间
        /**
         *  [NSObject alloc]这句代码在底层调用的代码过程
         *  第一个参数:调用方法的 对象
         *  第二个参数:对象 调用那个 方法
         */
        id objc = objc_msgSend([NSObject class], @selector(alloc));
        // 初始化
        objc = objc_msgSend(objc, @selector(init));
        NSLog(@"%@", objc);
    }
    
    @end
    
    

    相关文章

      网友评论

          本文标题:000-runtime简介

          本文链接:https://www.haomeiwen.com/subject/onniwttx.html