What is Life But One Chanllege After Another

Runtime之方法交换

简介

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

Runtime之方法交换

Runtime之NSObject结构

简介

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

Runtime之NSObject结构

应用启动-Main函数之前的那些事儿

上一篇文章中我们介绍了应用启动在objc_init方法执行前的调用堆栈,根据这个堆栈我们可以看出在main函数之前实际上系统内核以及dyld还做了很多的操作,那么这篇文章我们来详细的看一下在这个过程中到底做了哪些事情。

应用启动-Main函数之前的那些事儿

Mach-O 探究

Mach-OMach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。
Mach-O格式为大部分基于Mach内核的操作系统所使用的,包括NeXTSTEP, Mac OS XiOS,它们都以Mach-O格式作为其可执行文件,动态库,目标代码的文件格式。

Mach-O 探究

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

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

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

SideTable结构

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

SideTable结构

内存管理之Tagged pointer

iOS开发者对引用计数这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念,当引用计数为0时,对象就会被释放。但是,真的是所有对象都是这样吗?

内存管理之Tagged pointer

retain和release实现探究

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

retain和release实现探究

Xcode之断点调试

Xcode这个开发工具的使用相信每一个iOS开发者都已经可以熟练使用,但是要说到所有功能都详细了解,想必人数不多,这篇文章主要介绍xcode的断点调试功能。

Xcode之断点调试

组件化设计方案

随着多个功能需要在多个业务线短时间内实现功能同步,我们需要将新增功能模块和已有的功能模块逐步组件化,以达到多个业务线间可快速同步的效果

组件化设计方案