iOS runtime的通俗理解

runtime 在程序开发中的定位:

在计算机领域中,代码从编写到执行得出结果,中间会有编译链接运行等过程,这样我们的代码才可以转换成计算机所识别的指令等,然后达成我们期望的效果。而runtime 就是处于运行的这个阶段。基本上每个平台都有自己的runtime,比如Android等。

引用网上看到的一个说法,不知道是否准确,可以做个参考

“runtime 是一个通用的抽象的术语,指的是计算机程序运行的时候所需要的一切代码库,框架,平台等。”

Apple 中对runtime的描述

将尽可能多的决策从编译时和链接时推迟到运行时(Apple)
运行时系统充当着Object-C语言的操作系统,它使语言能够工作(Apple)

Objective-C 中runtime所起的作用
1、Objective-C程序在三个不同的层次上与运行时系统交互:
  • 通过Object-C源代码进行交互
  • 通过NSObject类中定义的方法交互
  • 通过直接调用运行时函数
2、runtime 在开发中有什么作用
  • 在程序运行过程中,动态地添加类,修改类的属性和方法
  • 遍历类中的所有属性和方法
  • 消息机制:消息传递、转发
3、runtime 的典型使用案例
  • 给分类添加属性和方法实现
  • 字典转模型
  • KVC、KVO
  • 归档(编码、解码)
  • 方法交换
  • 根据类名创建类,根据方法名找到方法实现

参考代码:

调用 runtime 的c语言代码需要添加的头文件

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

objc_class 结构体定义:

struct objc_class {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;

#if !__OBJC2__
    Class _Nullable super_class                              OBJC2_UNAVAILABLE;
    const char * _Nonnull name                               OBJC2_UNAVAILABLE;
    long version                                             OBJC2_UNAVAILABLE;
    long info                                                OBJC2_UNAVAILABLE;
    long instance_size                                       OBJC2_UNAVAILABLE;
    struct objc_ivar_list * _Nullable ivars                  OBJC2_UNAVAILABLE;
    struct objc_method_list * _Nullable * _Nullable methodLists                    OBJC2_UNAVAILABLE;
    struct objc_cache * _Nonnull cache                       OBJC2_UNAVAILABLE;
    struct objc_protocol_list * _Nullable protocols          OBJC2_UNAVAILABLE;
#endif

} OBJC2_UNAVAILABLE;
/* Use `Class` instead of `struct objc_class *` */

消息转发过程会调用的方法:
1、动态方法解析

+ (BOOL)resolveInstanceMethod:(SEL)sel 实例方法解析
+ (BOOL)resolveClassMethod:(SEL)sel 类方法解析

2、后备接受者对象

- (id)forwardingTargetForSelector:(SEL)aSelector

3、以其他形式实现该消息方法

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
- (void)forwardInvocation:(NSInvocation *)anInvocation

4、最后未处理,抛出异常

- (void)doesNotRecognizeSelector:(SEL)aSelector

参考网站:深入浅出Runtime

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值