Runtime之MetaClass
对于iOS开发者来说,元类
一直是一个在面试时被重点考察的点,为什么在语言设计时要增加元类
这个概念?他的优点是什么?他到底有什么作用呢?这篇文章我们从Runtime
源码的角度和语言设计的角度来探讨MetaClass
存在的原因以及他的存在解决了哪些问题。
iOS KVC 实现探究
我们都知道iOS开发中有很多黑魔法
,KVC就是其中之一,在平时开发中我们也会使用KVC去获取一些系统未公开的API方法,但同时我们可能要承担一些被拒或者因系统API改变导致的问题。这篇文章我们从源码的角度分析KVC的实现。
Runtime之KVO
KVO(Key-Value-Observer)
即键值监听,我们在平时的开发中通常用来监听对象属性的变化,比如UIScrollView
的ContentOffset
,不过同时我们要注意在不需要继续监听的时候及时的移除监听,否则可能会导致崩溃。因此这篇文章让我们更好的了解KVO
。
Runtime之对象的一生
在所有的面向对象语言中,万物皆对象。Objective-C也不例外,这篇文章我们从Runtime的源码去分析一个对象从创建到销毁的整个过程中都做了哪些操作,同时也加深我们对内存管理的理解。
Runtime之消息转发
我们都知道,在iOS开发中方法的调用实现实际上是通过消息发送的机制实现的,我们可以简单的理解为:
[A a];调用A类的a方法,实际上就是给类A的a方法发消息。
在这个过程中又会经历:方法查找、方法调用、方法转发这几个阶段,下面我们来通过这几个阶段来看下Runtime在这几个环境是如何实现的。
Runtime之NSObject结构
简介
OC是一门面向对象的语言,而对于面向对象语言来说一切皆对象
。相信每个iOS开发者都很清楚在OC中NSObject是绝大多数对象的父类。OC是一门动态语言,而动态的实现则是离不开Runtime。那么OC中的对象在Runtime中又是以一种什么样的形态出现的呢?本篇文章我们来详细介绍OC对象在Runtime中的结构。
应用启动-Main函数之前的那些事儿
在上一篇文章中我们介绍了应用启动在objc_init方法执行前的调用堆栈,根据这个堆栈我们可以看出在main函数之前实际上系统内核以及dyld还做了很多的操作,那么这篇文章我们来详细的看一下在这个过程中到底做了哪些事情。
Mach-O 探究
Mach-O
为Mach Object
文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。Mach-O
格式为大部分基于Mach
内核的操作系统所使用的,包括NeXTSTEP
, Mac OS X
和iOS
,它们都以Mach-O
格式作为其可执行文件,动态库,目标代码的文件格式。