OC底层基础:Runtime

一、Runtime

  • Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同
  • Objective-C的动态性是由Runtime API来支撑的
  • Runtime API提供的接口基本都是C语言的,源码由C\C++\汇编语言编写

二、isa详解

  • 要想学习Runtime,首先要了解它底层的一些常用数据结构,比如isa指针
  • 在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta_Class对象的内存地址
  • 从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息

三、objc_msgSend执行流程

  • OC中的方法调用其实都是转换为objc_msgSend函数调用
  • objc_msgSend的执行流程可以分为3大阶段
    1. 消息发送


      objc_msgSend执行流程-消息发送.png
    2. 动态方法解析


      objc_msgSend执行流程-动态方法解析.png
    3. 消息转发


      objc_msgSend的执行流程-消息转发.png

四、@dynamic

  • 提示编译器不要自动生成setter和getter的实现,不要自动生成成员变量

五、super

  • [super class]
  • [super superclass]

注:面试题

  • 讲一下OC的消息机制
  • 消息转发机制流程
  • 什么是Runtime?平时项目中有用过吗

你可能感兴趣的:(OC底层基础:Runtime)