
iOS 底层探索
踏实做好每件小事
如果你有一天忘记了努力,我会给你讲kobe的故事。
个人博客 http://leejunhui.com
公众号 iOSDaily
展开
-
iOS 底层探索 - KVC
一、KVC 初探Key Value Coding 也即 KVC 是 iOS 开发中一个很重要的概念,中文翻译过来是 键值编码 ,关于这个概念的具体定义可以在 Apple 的官方文档处找到。Key-value coding is a mechanism enabled by the NSKeyValueCoding informal protocol that objects adopt to...原创 2020-02-28 16:29:47 · 395 阅读 · 0 评论 -
iOS 底层探索 - 类拓展和关联对象
前面我们探索了 iOS 中类和分类的加载,关于类这一块的内容,我们还有一些坑没有填,比如类拓展和关联对象,今天让我们一起填下这块的坑。一、类拓展1.1 什么是类拓展?关于类拓展的具体定义,大家可以直接参考 Apple 对于类拓展的说明。A class extension bears some similarity to a category, but it can only be add...原创 2020-02-26 15:01:18 · 262 阅读 · 0 评论 -
iOS 底层探索 - 分类的加载
一、初探懒加载类上一章我们探索了 iOS 中类的加载,让我们简单回顾一下大概的流程。1.1 类的加载回顾libObjc 向 dyld 注册了回调 _dyld_objc_notify_register,当 dyld 把 App 以及 App 所依赖的一系列 Mach-O 镜像加载到当前 App 被分配的内存空间之后,dyld 会通过 _dyld_objc_notify_mapped 也就...原创 2020-02-25 17:22:23 · 389 阅读 · 0 评论 -
iOS 底层探索 - 类的加载
一、应用加载回顾上一章我们对应用的加载有了初步的认识,我们知道了系统调用 exec() 会我们的应用映射到新的地址空间然后通过 dyld 进行加载、链接、初始化主程序和主程序所依赖的各种动态库最后在 initializeMainExecutable 方法中经过一系列初始化调用 notifySingle 函数,该函数会执行一个 load_images 的回调然后在 doModinit...原创 2020-02-25 17:21:16 · 557 阅读 · 0 评论 -
iOS 底层探索 - 应用加载
App 从被用户在主屏幕上点击之后就开启了它的生命周期,那么在这之中,究竟发生了什么呢?让我们从 App 启动开始探索。在探索之前,我们需要熟悉一些前导知识点。一、前导知识以下参考自 WWDC 2016 Optimizing App Startup Time :1.1 Mach-OMach-O is a bunch of file types for different run ...原创 2020-02-25 17:18:05 · 566 阅读 · 0 评论 -
iOS 底层探索 - 消息转发
一、动态方法解析流程分析我们在上一章《消息查找》分析到了动态方法解析,为了更好的掌握具体的流程,我们接下来直接进行源码追踪。我们先来到 _class_resolveMethod 方法,该方法源码如下:void _class_resolveMethod(Class cls, SEL sel, id inst){ if (! cls->isMetaClass()) { ...原创 2020-02-25 17:14:24 · 282 阅读 · 0 评论 -
iOS 底层探索 - 消息查找
一、objc_msgSend 汇编补充我们知道,之所以使用汇编来实现 objc_msgSend 有两个原因:因为 C 无法通过写一个函数来保留未知的参数并且跳转到一个任意的函数指针。objc_msgSend 必须足够快。1.1 objc_msgSend 流程ENTRY _objc_msgSend对消息接收者进行判断、处理 (id self, sel _cmd)taggedP...原创 2020-02-25 17:10:44 · 231 阅读 · 0 评论 -
iOS 底层探索 - 方法
我们在前面探索了对象和类的底层原理,接下来我们要探索一下方法的本质,而在探索之前,我们先简单过一遍 Runtime 的知识点,如果读者对这块内容已经很熟悉了的话可以直接跳过第一章。PS: 由于笔者对汇编暂时还是摸索的阶段,关于汇编源码的部分如有错误,欢迎指正。一、Runtime 简介众所周知,Objective-C 是一门动态语言,而承载整个 OC 动态特性的就是 Runtime。关于...原创 2020-02-25 17:09:34 · 277 阅读 · 0 评论 -
iOS 底层探索 - cache_t
上一篇我们一起探索了 iOS 类的底层原理,其中比较重要的四个属性我们都简单的过了一遍,我们接下来要重点探索第三个属性 cache_t,对于这个属性,我们可以学习到苹果对于缓存的设计与理解,同时也会接触到消息发送相关的知识。一、探索 cache_t1.1 cache_t 基本结构我们还是先过一遍 OC 中类的结构:struct objc_class : objc_object { ...原创 2020-02-25 17:08:11 · 357 阅读 · 0 评论 -
iOS 底层探索 - 类
我们在前面探索了 iOS 中的对象原理,面向对象编程中有一句名言:万物皆对象那么对象又是从哪来的呢?有过面向对象编程基础的同学肯定都知道是类派生出对象的,那么今天我们就一起来探索一下类的底层原理吧。一、iOS 中的类到底是什么?我们在日常开发中大多数情况都是从 NSObject 这个基类来派生出我们需要的类。那么在 OC 底层,我们的类 Class 到底被编译成什么样子了呢?我们新...原创 2020-02-25 17:06:43 · 287 阅读 · 0 评论 -
iOS 底层探索 - calloc 和 isa
上一篇文章主要我们探索了 iOS 对象的 alloc 和 init 以及对象是怎么开辟内存以及初始化的,如果在对象身上增加一些属性,是否会影响内存开辟呢?还有一个遗留问题就是通过 calloc ,我们的对象有了内存地址,但是对象结构里面的 isa 是怎么关联到我们的对象的内存地址的呢。一、calloc 底层探索在探索 calloc 底层前,我们先补充一下内存对齐相关的知识点。1.1 ...原创 2020-02-25 17:00:36 · 289 阅读 · 0 评论 -
iOS 底层探索 - alloc & init
alloc & init 探索作为 iOS 开发者,我们每天打交道最多的应该就是对象了,从面向对象设计的角度来说,对象的创建以及初始化是最基础的内容。那么,今天我们就一起来探索一下 iOS 中最常用的 alloc 和 init 的底层是怎么实现的吧。一、 如何进行底层探索对于第三方开源框架来说,我们去剖析内部原理和细节是有一定的方法和套路可以掌握的。而对于 iOS 底层,特...原创 2020-02-25 16:58:23 · 400 阅读 · 0 评论