![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS底层探索
亮亮不想说话
这个作者很懒,什么都没留下…
展开
-
iOS底层探索--内存管理
iOS底层探索--内存管理1. 五大分区全局变量和局部变量在内存中是否有区别?有什么区别?Block中是否可以直接修改全局变量全局静态变量的修改2. TaggedPointer3.NONPOINTER_ISA的优化3. retain & release & retainCount & dealloc分析retain 和 release 分析RetainCount 分析dealloc分析4. 循环引用5. Timer循环引用的解决6. 自动释放池 AutoreleasePoolAuto原创 2020-05-31 01:07:51 · 540 阅读 · 0 评论 -
iOS底层探索 -- 多线程
iOS底层探索 -- 多线程1. 多线程概念问题2. 多线程原理3. 端口通讯4. GCD 初探1. 多线程概念问题线程的定义线程是进程的基本单元,一个进程的所有任务都在线程中执行进程要想执行任务,必须得有线程,进程至少有有一条线程程序启动默认会开启一条线程,这条线程被称为主线程或者UI线程进程的定义进程是指在系统中正在运行的一个应用程序每个进程之间是互相独立的,每个进程均运行在其专用的且受保护的内存中进程和线程的关系地址空间:同一进程的线程共享本进程的地址空间,原创 2020-05-08 17:58:51 · 192 阅读 · 0 评论 -
iOS底层探索 -- KVO探索
iOS底层探索 -- KVO探索前言1. KVO初探1.1 context 的作用1.2 自动观察1.3 多个因素影响1.4 可变数组的观察2. KVO 原理分析3. 自定义 KVO 思路4. KVO 函数式编程5. FBKVO 简单分析前言 上一篇学习了KVC键值编码的查找原理,而KVO(Key-Value Observing)在开发中也是用的比较多。本篇我们深入底层探索一下KVO的底层原...原创 2020-05-01 23:37:54 · 252 阅读 · 0 评论 -
iOS底层探索 -- KVC 底层原理分析
iOS底层探索 -- KVC 底层原理分析前言1. KVC(Key-Value Coding)初探2. KVC 深入2.1 访问对象属性2.2 访问集合属性2.3 集合运算符2.4 访问非对象属性2.5 属性验证2.6 KVC 取值和赋值原理前言 在日常的开发中,在对数据进行处理中,常常使用三方框架将其转换为模型 (model),以方便使用点语法进行调用。这些框架底层都是...原创 2020-05-01 00:30:43 · 378 阅读 · 0 评论 -
iOS -- 经典面试题
iOS -- 经典面试题1. `Runtime` 是什么?2. 方法的本质是什么?SEL是什么?IMP是什么?两者之间的关系是什么?3. 能否向编译后的得到的类中增加实例变量?能否向运行时创建的类添加实例变量?4. isKindOfClass 和 isMemberOfClass 的区别5. [self class] 和 [super class] 的区别6. weak 原理,weak 如何实现,为...原创 2020-04-27 18:11:56 · 284 阅读 · 0 评论 -
iOS 类拓展分析、load_iamges分析、initalize分析
iOS 类拓展分析、load_iamges分析、initalize分析前言1. 类拓展分析2. 关联对象原理3. load_images 分析4. initalize 分析总结前言 通过之前几篇对read_iamges的分析,我们知道了程序在启动运行时的流程,知道了什么是 懒加载类 和 非懒加载类 和其加载过程,以及搭配 非懒加载分类 和 懒加载分类 时的几种加载情况。那么...原创 2020-04-12 19:12:35 · 184 阅读 · 0 评论 -
iOS 应用程序加载
iOS 应用程序加载1. APP 加载分析1.1 动静态库1.2 加载过程2.`_dyld_start` 分析2.1 `reloadAllImages` 分析2.2 `initializeMainExecutable` 运行所有初始化程序总结1. APP 加载分析1.1 动静态库app依赖很多底层库,底层库是很什么?可执行的代码的二进制,可以被操作系统写入到内存库分为几种...原创 2020-04-11 19:45:34 · 378 阅读 · 0 评论 -
iOS 方法动态决议和消息转发机制
iOS 方法动态决议和消息转发机制1. 动态方法决议1.1 实例方法动态解析 _class_resolveInstanceMethod1.2 _class_resolveClassMethod小结2. 消息转发2.1 快速转发流程2.2 慢速转发流程总结通过上一篇章的学习,OC调用方法,底层是调用 objc_msgSend 发送消息。在发送消息时会经过一系列的...原创 2020-04-11 19:44:38 · 310 阅读 · 0 评论 -
iOS OC 方法查找流程
iOS OC 方法查找流程前言1. `_class_lookupMethodAndLoadCache3`方法查找流程2. 面试题前言上一篇关于方法的本质的探索中,我们知道了方法的底层是调用objc_msgSend发送消息,并对objc_msgSend的底层汇编进行了分析。当用汇编快速查找,未查找到方法缓存时,会调用 MethodTableLookup,然后调用_class_lookupMeth...原创 2020-04-11 19:43:38 · 610 阅读 · 0 评论 -
iOS OC 方法的本质
iOS OC 方法的本质前言:1. 方法本质初探2. `objc_msgSend`汇编分析前言:前面探究了方法在类中的缓存,那么方法的本质是什么呢?方法调用在底层做了什么呢?今天我们来探索一下:1. 方法本质初探看一下一段代码:先定义一个LGPerson类,然后定义sayNB对象方法,然后在main函数中调用int main(int argc, const char * argv[])...原创 2020-04-11 19:42:39 · 407 阅读 · 0 评论 -
iOS OC类原理二
iOS OC类原理二前言:1. `cache_t cache LLDB` 简单分析2.`cache_t cache` 流程源码分析`cache_fill_nolock`详细流程:前言:上一篇探索了属性 成员变量 方法在类中是如何存储的,即存储在class_ro_t *ro中,上一篇中提到为什么在rw中也能打印相应的属性 方法呢?因为rw中的属性 方法在编译期是没有的,是在运行时从ro中cop...原创 2020-04-11 19:40:57 · 108 阅读 · 0 评论 -
iOS 类的加载分析
iOS 类的加载分析前言1. objc_init分析1.1 environ_init() 环境变量1.2 tls_init()1.3 static_init()1.4 lock_init()1.5 exception_init()1.5 _dyld_objc_notify_register()2. map_images2.1 _read_images2.2 rea...原创 2020-04-11 19:36:41 · 391 阅读 · 0 评论 -
iOS 分类的加载
iOS 分类的加载前言1. Runtime 面试题2. 类和非懒加载类的加载2.1 类和非懒加载类分析2.2 非懒加载类的加载2.3 懒加载类的加载3. 分类 Category 的加载3.1 clang 初探 分类 Category 的结构3.2 类 与 分类 Category 的搭配加载1. 懒加载的分类(未实现`load`方法)2. 非懒加载的分类(实现`load`方法)总结前言...原创 2020-04-11 19:32:09 · 498 阅读 · 0 评论 -
iOS OC 类原理一
iOS OC 类原理一1. `类`和`元类`的创建时机1.1 打印 `类`和`元类`的指针1.2 `command + B`生成可执行文件,然后使用 `MachoView` 打开程序二进制可执行文件查看2. 指针偏移2.1 普通指针 值拷贝2.2 指针拷贝2.3 指针偏移3. 类的结构3.1 类的结构是什么?3.2 类的结构分析通过对`类`结构的分析,得出:`成员变量`存在`ivars`中,`属...原创 2020-04-07 15:02:23 · 198 阅读 · 0 评论 -
iOS OC 对象原理探索三
iOS OC 对象原理探索三前言:1. `isa`指针结构2. `isa`的初始化3. `isa`关联对象和类4. `isa`的走位5. 对象的本质6. `union`联合体补充1. 什么是联合体2.联合体的好处前言:前面分析了对象创建时alloc是怎么申请内存空间,通过研究Class的第一个属性是isa,我们都知道isa的指向其类,对象的isa指向类Class, 那么对象创申请完内存空间之后...原创 2020-04-07 15:01:08 · 172 阅读 · 0 评论 -
iOS OC 对象原理探索二
iOS OC 对象原理探索二内存对齐原则1. 数据成员对齐规则:2. 结构体作为成员:3. 收尾工作:成员变量内存探究1.代码分析2.calloc源码分析Xcode 常用 LLDB 指令上一篇提到alloc开辟内存是8字节对齐,用空间换取查找时间,那么像int、char这样非8字节的变量,在内存中是什么样的呢?首先我们看看对齐原则如下:内存对齐原则1. 数据成员对齐规则:结构体(st...原创 2020-04-07 14:59:48 · 137 阅读 · 0 评论 -
iOS OC 对象原理探索一
iOS OC 对象原理探索一alloc源码探索思路探索方法alloc源码分析init函数源码分析new方法源码alloc源码探索思路iOS中 alloc是怎么创建对象的?init做了什么? 下面研究探索一下alloc底层实现探索方法方法一:直接代码下断点 :通过control + in - objc_alloc 找到 libobjc.A.dylib方法二:符号断点: libob...原创 2020-04-07 14:53:57 · 171 阅读 · 1 评论