000-runtime简介

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,800评论 0 9
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 6,438评论 0 9
  • 参数自一个指针,指向类的要接收消息的实例。 OP在处理该信息的方法的选择。 ......可变参数列表包含参数的方法...
    reallychao阅读 4,253评论 0 0
  • 别以为你全心帮助,你倾尽全部, 就能换来等同的回报。 这世上,总有些不知领情的人, 凉了你的心意,伤了你的好意。 ...
    漂浮的流云阅读 3,954评论 3 5
  • 焦糖咖啡,入口带有一丝微甜,伴有半分青涩的酸。下咽后嘴里充斥着苦味,味蕾把苦味传给大脑,识海瞬时清醒。苦味变淡,唇...
    此人有点帅阅读 1,950评论 0 0