首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
runtime分析
订阅
sclcoder
更多收藏集
微信扫码分享
微信
新浪微博
QQ
12篇文章 · 1订阅
动态方法解析与消息转发的应用
因此可以断定,实现方法动态解析,是在+(BOOL)resolveInstanceMethod:(SEL)sel/+(BOOL)resolveClassMethod:(SEL)sel中,为类/元类的方法列表动态添加实例方法/类方法。 从方法动态解析的原理不难发现,其功能实现是和单…
Runtime源代码解读9(内存管理Retain/Release)
首先需要理解类、对象、对象引用、isa之间的关系。APP 在加载阶段会将 Objective-C 类载入内存的静态区,Objective-C 类本质是 C 语言结构体objc_class,结构体包含了类的超类、协议、成员变量列表、方法列表等类的元数据。类载入内存后,在内存中占据…
Runtime源代码解读3(成员变量列表)
类的成员变量列表描述类的对象需要保存哪些数据,包括这些数据的名称、类型、在对象内存空间中占用的区块、对齐方式准则信息。通过成员变量的内存布局信息,可以直接由对象内存地址定位成员变量的内存地址,实现高效的对象数据读写。 成员变量的数据结构是ivar_t结构体,定义指向ivar_t…
Runtime源代码解读11(内存管理Weak)
Weak 指针是为了解决引用计数内存管理可能存在的循环引用问题而设计的,一种指向对象而不增加对象的引用计数,且指向的对象析构时能自动置nil的特殊指针。 在 NSObject.mm 中找到实现 weak 指针的关键代码template <bool HaveOld, bool H…
Runtime源代码解读6(分类)
本文介绍分类(Category)的实现以及分类的加载过程。分类是对 Objective-C 类的一种扩展方式。说到分类不可不提扩展(Extension)。扩展通常被视为匿名的分类,但是两者实现的区别还是很大的: 分类的数据结构是category_t结构体。包含了分类名称name…
Runtime源代码解读5(属性)
属性(property)是为类的成员变量提供公开的访问器。属性与方法有非常紧密的联系,可读写的属性有 getter 和 setter 两个方法与之对应。 属性(property)大多数情况是作为成员变量的访问器(accessor)使用,为外部访问成员变量提供接口。使用@prop…
Runtime源代码解读4(方法列表)
类的方法包括实例方法(instance method)和类方法(class method),两者保存在完全不同的地方,实例方法保存在类的方法列表中,类方法保存在元类的方法列表中。在Runtime源代码解读(实现面向对象初探)中已介绍过方法的基本数据结构objc_method,以…
Runtime源代码解读2(类和对象)
在Runtime源代码解读(实现面向对象初探)中,从Cocoa框架中的runtime.h头文件公开的数据结构及 API 对 runtime 整体有一个大概的认知。从本文开始具体分析 Apple 开源的runtime源代码。本文介绍 runtime 如何通过C语言结构体实现类和对…
Runtime源代码解读(实现面向对象初探)
文章的开头是Apple Documentation对runtime的定义,很官方也很抽象。个人对runtime的理解是:在狭义上,runtime用面向过程的C语言实现了面向对象特性,也就是实现了类和对象;在广义上,runtime实现了Objective-C语言的动态特性(深入O…
Runtime源代码解读10(内存管理Autorelease)
本文继续探究另一种内存管理方式 Autoreleasing,即通过自动释放池 autorelease pool 进行内存管理。以下摘自 Runtime 源代码中名为 Autorelease pool implementation 的注释: Autorelease pool 的 …