首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
Runtime
订阅
用户651469943052
更多收藏集
微信扫码分享
微信
新浪微博
QQ
16篇文章 · 0订阅
iOS 底层原理|Runtime 详解
一、Runtime 简介静态语言:在编译阶段就已确定所有变量的数据类型,同时也确定要调用的函数,以及函数的实现。常见的静态语言,如:C/C++、Java、C# 等。动态语言:程序在运行时可以改变其结构
iOS 从源码解析 AssociatedObject 底层实现原理
提示我们需要手动为属性添加 setter gettr 方法或者使用 @dynamic 在运行时实现这些方法。 即明确的告诉我们在分类中 @property 并不会自动生成实例变量以及存取方法。 不是说好的使用 @property,编译器会自动帮我们生成下划线实例变量和对应的 s…
iOS 从源码解析Runtime (十四):由源码解读属性&成员变量的修饰符
首先定义一个 LGPerson 类,添加一系列如下不同修饰符的属性,属性的本质是编译器自动帮我们生成: _Ivar + setter + getter。 选择真机运行模式,保证编译出的是 ARM 下的汇编指令,(x86 的看不太懂)然后在 xcode 左侧用鼠标选中 LGPer…
iOS 从源码解析Runtime (十三):聚焦 objc_class(objc_class函数内容篇)
data 函数是直接调用的 class_data_bits_t bits 的 data 函数,内部实现的话也很简单,通过掩码 #define FAST_DATA_MASK 0x00007ffffffffff8UL(二进制第 3-46 位是 1,其他位都是 0) 从 class_…
iOS 从源码解析Runtime (十二):聚焦objc_class(class_rw_t 内容篇)
class_rw_t 的成员变量。 这里先分析一下 class_rw_t 的 private 部分。 这里分析模版类 objc::PointerUnion 基于 objc::PointerUnion<const class_ro_t *, class_rw_ext_t…
iOS 从源码解析Runtime (十一):聚焦 objc_class(class_data_bits_t 内容篇)
class_data_bits_t data 作为 objc_class 的第四个成员变量也是最后一个成员变量,它的作用正如它的名字 data,而它也正是存储管理了类相关的所有数据,例如我们上篇一直讲的当缓存未命中时就会去类的方法列表中继续查找,而这个方法列表正保存在 data…
iOS 从源码解析Runtime (十):聚焦cache_t objc-msg-arm64.s补充(3)
终于来到了我们最核心的 objc_msgSend 函数。 查找 IMP。 未找到 IMP 时的结束工作。 即我们日常使用的 [super xxxxx] 函数调用,它的第一个参数 receiver 同样是我们的 self 并不是 self 的父类,而它与 _objc_msgSen…
iOS 从源码解析Runtime (九):聚焦cache_t objc-msg-arm64.s解析(2)
把指定的 sel 和 imp 插入到 cache_t 中,如果开始是空状态,则首先会初始一个容量为 4 散列数组再进行插入,其它情况插入之前会计算已用的容量占比是否到了临界值,如果是则首先进行扩容,然后再进行插入操作,如果还没有达到则直接插入,插入操作如果发生了哈希冲突则依次进…
iOS 从源码解析Runtime (八):聚焦cache_t及方法缓存实现相关内容篇(1)
cache 是 objc_class 的第三个成员变量,类型是 cache_t。从数据结构角度及使用方法来看 cache_t 的话,它是一个 SEL 作为 Key ,SEL + IMP(bucket_t) 作为 Value 的散列表。为了对方法缓存先有一个大致的了解,我们首先解…
iOS 从源码解析Runtime (七):聚焦objc_object(dealloc、autorelease返回值优化篇)
对象 Dealloc 的内部实现。如下条件全部为真的话,可以直接调用 free 进行快速释放内存。 对象的 isa 是优化的 isa。 对象不存在弱引用。 对象没有关联对象。 对象没有 C++ 的析构的函数。 对象的引用计数没有保存在 SideTable 中。 至此 rootD…