iOS渐入佳境之RunTime(三):刨根问底

前言

通过前两篇的基础概念学习和习题练习,已经知道:runTime是Objective-C作为动态语言的保障。仅仅知道这些还不够,今天就来刨根问底!

为什么需要有RunTime?

静态语言在编译和链接过后就已经决定出代码逐行代码执行的顺序,而动态语言很多是在运行再决定怎样执行,这就需要一个运行的机制来操作,这个机制就是RunTime。

RunTime都做了什么?

  1. 封装:在这个库中,对象可以用C语言中的结构体表示,而方法可以用C函数来实现,另外再加上了一些额外的特性。这些结构体和函数被runtime函数封装后,我们就可以在程序运行时创建,检查,修改类、对象和它们的方法了。
  2. 找出方法的最终执行代码:当程序执行[object doSomething]时,会向消息接收者(object)发送一条消息(doSomething),runtime会根据消息接收者是否能响应该消息而做出不同的反应。这将在后面详细介绍。

其实,用通俗一点的语言来讲就是,对于Objective-C里所有的语句结构,RunTime都进行一次重新翻译,找到最终执行代码。

我们需要了解的是,RunTime对每一种语句结构怎么样翻译(其实就是底层实现),以及如何运用这个机制设计出更加动态灵活的代码结构。

推荐

这部分我主要推荐网上已经有的资料,我就是看这些才对RunTime有更深的认识,在此非常感谢博主和强大的网络!

  • 类与对象基础数据结构相关

Objective-C Runtime 运行时之一:类与对象

  • 成员变量与属性相关:

Objective-C Runtime 运行时之二:成员变量与属性

  • 方法与消息相关

Objective-C Runtime 运行时之三:方法与消息

  • 运用Method Swizzling

了解RunTime对于方法与消息的处理,就很容易运用Method Swizzling来修改运行时方法的实现。

Objective-C Runtime 运行时之四:Method Swizzling

  • 协议与分类有关

Objective-C Runtime 运行时之五:协议与分类

  • 其他:super、库相关操作、块操作、弱引用操作、宏定义、布尔值、空值、分发函数原型、Objective-C根类、局部变量存储时长、关联对象行为等等

Objective-C Runtime 运行时之六:拾遗

后话

在自学的路上,一定要善于利用网络上的资源,遇到的问题有无数的前人已经找到了解决方案,也帮忙整理了很多资料,阅读过这些往往会对解决问题起到事半功倍的效果!希望大家,有所收获!共勉!