What is Life But One Chanllege After Another

Runtime之KVO

KVO(Key-Value-Observer)即键值监听,我们在平时的开发中通常用来监听对象属性的变化,比如UIScrollViewContentOffset,不过同时我们要注意在不需要继续监听的时候及时的移除监听,否则可能会导致崩溃。因此这篇文章让我们更好的了解KVO

Runtime之KVO

Runtime之对象的一生

在所有的面向对象语言中,万物皆对象。Objective-C也不例外,这篇文章我们从Runtime的源码去分析一个对象从创建到销毁的整个过程中都做了哪些操作,同时也加深我们对内存管理的理解。

Runtime之对象的一生

Runtime之消息转发

我们都知道,在iOS开发中方法的调用实现实际上是通过消息发送的机制实现的,我们可以简单的理解为:

[A a];调用A类的a方法,实际上就是给类A的a方法发消息。

在这个过程中又会经历:方法查找、方法调用、方法转发这几个阶段,下面我们来通过这几个阶段来看下Runtime在这几个环境是如何实现的。

Runtime之消息转发

Runtime之方法交换

简介

前面几篇文章我们介绍了Runtime中NSObject的数据结构,下面我们来介绍下Runtime在平时开发过程中的常用方法以及实现原理。

Runtime之方法交换

Runtime之NSObject结构

简介

OC是一门面向对象的语言,而对于面向对象语言来说一切皆对象。相信每个iOS开发者都很清楚在OC中NSObject是绝大多数对象的父类。OC是一门动态语言,而动态的实现则是离不开Runtime。那么OC中的对象在Runtime中又是以一种什么样的形态出现的呢?本篇文章我们来详细介绍OC对象在Runtime中的结构。

Runtime之NSObject结构

RunTime解析--Category(分类)实现

在日常的开发中,我们经常用到分类,用来给一个类添加扩展,包括对象方法、类方法、当然我们还可以通过关联对象的方式给分类添属性。但是这中间的过程是如何实现的呢?下面我们来做一个详细的解释。

RunTime解析--Category(分类)实现

SideTable结构

iOS开发者都知道,当一个对象被释放时,所有对这个对象弱引用的指针都会释放并置为nil,那么系统是如何存储这些弱引用对象的呢?又是如何在一个对象释放时,将这些指向即将释放对象的弱引用的指针置为nil的呢?下面我们通过分析SideTable的结构来进一步了解内存管理的弱引用存储细节。

SideTable结构

retain和release实现探究

前面一篇文章,我们讲到了系统为了优化数字字符串等类型的数据存储新增了一种NSTaggedPointer类型,同时我们还发现,isa指针在经过优化后,提供了19个bit位用来存储引用计数的个数。但是如果超出了这个限制呢?

retain和release实现探究

RunTime的那些事儿

Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的!

RunTime的那些事儿