首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
iOS底层系列
小峰子
创建于2021-05-11
订阅专栏
从源码,clang,汇编等多角度解读底层原理,构建完整的iOS知识体系,底层面试再也不用苦恼了。
等 19 人订阅
共14篇文章
创建于2021-05-11
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
iOS底层 -- 内存管理底层分析
本文主要说明iOS的内存优化方案,从底层探索系统优化内存的方式等。 1. ROM和RAM ROM是只读存储器,是内部存储器的一种。它用来存储手机系统文件、图片、软件等等,不会随着掉电而丢失数据,ROM
iOS底层 -- block原理
本篇文章主要分析block的类型,循环引用的解决,以及从clang和源码的角度解读block的底层原理。
iOS底层 - 多线程之底层篇
本文旨在通过分析GCD相关的底层实现,充分掌握上层API的使用技巧。 通常使用越是方便的API,往往越不会去窥探它的原理,容易形成拿来即用的习惯,而GCD就像是这样的存在。 研究源码,首先需要找到源码所在的库。 GCD的底层相对Objc来说是晦涩难懂的,因为它的分支较多,宏定义…
iOS探索 - 多线程之GCD应用
本文主要在列出GCD使用过程中常用的API,在使用场景和注意细节加以说明。 线程编程有多种方式,pthread,NSThread,GCD,NSOperation。为什么选择GCD? GCD是苹果为多核的并行运算提出的解决方案,它是一套纯C语言的API,它会自动利用更多的CPU内…
iOS探索 - 多线程之相关原理
包括原理篇,应用篇,底层篇,面试篇。本文主要讲诉多线程相关的原理,后续文章依次讲诉其他。 进程是指在系统中正在运行的一个可执行文件,每个进程之间都是相互独立的,每个进程运行在其专用且受保护的内存。 我们常说iOS是单进程的。这对也不对。 如果真是单进程,完全没有后台,那想想推送…
iOS底层-分类的加载分析
本文旨在通过分析分类的加载流程,类和分类分别在懒加载和非懒加载时的表现,完善所有类的加载流程。 上一篇文章类的加载分析分析了map_images的主要流程,此流程中最后为分类的加载部分,现在回头来解析下。 其先从macho中__objc_catlist段下读取分类,然后遍历读取…
iOS底层--类的加载分析
本文旨在分析dyld初始化主程序时,类结构是如何被加载的,类数据是如何处理的。这部分也隶属于main()函数前的流程。 上篇dyld是如何加载app的分析了dyld的流程,说明了在准备初始化主程序时,libObjc会来_objc_init()到对项目中所有的类结构进行初始化。因…
iOS底层 -- dyld是如何加载app的
本文旨在初步了解app启动前系统的行为,主要分析dyld的操作流程,这对于后续做启动优化是很有必要的。 dyld是苹果操作系统的动态链接器。dyld和操作系统的关系准确来说,操作系统通过映射的方式将它加载到进程的地址空间中。操作系统加载完dyld后,就把控制权交给dyld。当d…
iOS底层-消息转发流程分析
先来看个很经典的崩溃打印。一般这个日志前部分还会给出所调用的方法,我们可以借此很快找到原因所在,可以说是相当贴心了。然而, 苹果在方便我们的同时,你是否想过这个日志具体是在什么时候打印的,系统是靠什么来捕获这类型即将崩溃的信息,开发者是否也可以捕获呢。 消息发送后,经过一系列查…
iOS底层--方法查找流程分析(附面试坑点)
本文主要分析方法在底层的本质,方法发送的几种情况,方法查找流程等,结合cache_t,对消息发送流程有一个更宏观的理解。 如果不深入了解方法查找流程,可能会有被卡住。下面就是对方法查找流程的分析(最后附加答案)。 上篇文章iOS底层-cache_t流程分析说明了cache_t缓…
iOS底层-cache_t流程分析
本文旨在通过源码分析cache_t相关,如缓存策略,动态扩容等,了解方法查找的前置流程。因其与objc_msgSend流程有密切联系,而发送消息又是iOS方法的本质,故了解cache_t是有必要的。 根据这个结果,会发现前面三个cls还有一点规律可循,occupied每次+1,…
iOS底层 -- 类的本质分析
上文说到,对象通过isa和类关联,同个类型的对象可以多次创建,所以对象可以有多个。那么类呢,根据开发经验,很容易得出类在内存中只有一个,那究竟要怎么实锤呢。提供验证方式: 可以看到,在DATA段的_objc_classrefs内已经加载了CJPerson类,并指定了内存地址,说…
iOS底层-包罗万象的isa
上篇说到,alloc在开辟空间后也初始化了isa,从而把对象和类关联起来。所以对于对象来说,isa的基础作用就是和类进行绑定,告诉系统对象的归属。但是大部分nonpointer的isa不仅仅只是做指向,其内部还存储了大量的信息。 如果是TaggedPointer,后面就不执行,…
iOS底层 - alloc和init探索
众所周知,alloc和init是我们最熟悉的最简单的api,那你是否完全了解它呢,还是它是你最熟悉的陌生人。我们就从源码入手, 看看alloc和init究竟分别做了什么? 上述代码打印出来的结果为:24,16。 为什么结构体内是相同的结构,系统却分配了不同大小的内存呢,这就是系…