码迷,mamicode.com
首页 > 其他好文 > 详细

runtime

时间:2016-06-23 21:55:18      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

1. runtime 就是运行时,  运行时就说动态调用

2. OC就是运行时机制, 也就是在运行的时候的一些机制, 其中最主要的是消息机制

3. 对应C语言, 函数的调用在编译的时候就决定调用哪个函数, 对于OC, 函数的调用属于动态调用过程, 在编译的时候不能真正决定调用哪个函数, 只有在正在运行的时候才会根据函数的名称找到对于的函数来调用

4. 编译阶段, OC可以调用任意函数, 即使某个函数只有声明没有实现, 但是C中就会报错

 

什么是消息机制?

OC 方法的调用就说发送消息 

 

//注: Xcode6 开始苹果就不推荐使用runtime了, 把很多函数的参数注释了, 这样是为了让用户更加依赖自己, Xcode7 以后有很多私有的成员变量都被屏蔽了

 

runtime使用场景

1. 如果想调用一个没有暴露出来的方法(没有在.h文件中声明的方法), 或者系统的方法

2. 写自己框架

 

runtime 的作用 

  • 发送消息

    1. 导入头文件

      #import <objc/message.h> 或者<objc/runtime.h>

    2. Xcode编译设置

      工程 -->  TARGETS -->  build Settings -->  搜索 msg -->  将严格检查OC消息机制 的值设置为NO

    3.

       Person *p = [Person alloc];

     => Person *p = objc_msgSend([Person class] @selector(alloc));

 

       p = [p init];

     => objc_msgSend(@selector(init));

 

       [p eat];

       objc_msgSend(p, @selector(eat));

    4. 方法调用的流程: (方法调用的本质是发送消息)

      1. 寻找方法, (对象方法保存在类里,每个类里都有一个方法列表), 根据isa指针去找到对应的类

      2. 根据方法编号去方法列表里找到对应的方法, @selector(eat)返回的就是方法编号

      3. 调用方法即可

  • 交换方法

说明

  • 动态添加方法

说明

  • 给分类添加属性

说明

  • 字典转模型

说明

runtime

标签:

原文地址:http://www.cnblogs.com/skjr/p/5612085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!