首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Objective-C
项阿丑
创建于2026-02-04
订阅专栏
OC相关知识整理
暂无订阅
共188篇文章
创建于2026-02-04
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
2-9.【OC】【内存管理】weak 表是什么时候被清理的?
weak 表的清理发生在一个对象的 生命终点,确切地说,是在 dealloc 流程执行到 objc_destructInstance 这一步时。 清理过程并不是一蹴而就的,而是一场严密的“定点清除”行
2-8.【OC】【内存管理】weak 表(Side Table)里到底存了什么?
在 Objective-C 的底层实现中,SideTable 是管理内存安全的核心仓库。它并不是一张简单的表,而是一个复杂的 多级嵌套数据结构,专门用来存储引用计数和弱引用信息。 我们可以通过“三层嵌
2-7.【OC】【内存管理】__weak 变量为什么在对象释放后会自动变成 nil?
__weak 变量之所以能在对象释放时自动清空(Zeroing),并不是因为它在不断地“监听”对象,而是因为 Objective-C Runtime 维护了一套高效的**弱引用表(Weak Table
2-6.【OC】【内存管理】ARC 下,__strong 的真实含义是什么?
在 ARC 环境下,__strong 是 Objective-C 指针的默认修饰符。它的真实含义可以从所有权语义、生命周期管理以及底层运行时实现三个维度来解剖。 简单来说,__strong 的本质是:
2-5.【OC】【内存管理】ARC 编译期插入了哪些代码?
在 ARC(Automatic Reference Counting)模式下,编译器(Clang)并不是简单地替你手写了 retain/release,它实际上进行了一场**“静默的局部最优解计算”*
2-4.【OC】【内存管理】MRC 下,下面代码是否安全?为什么?
在 MRC(Manual Reference Counting)环境下,这段代码是安全的,但它代表了一种极度不规范且容易埋坑的写法。 虽然最终内存引用计数是平衡的,但它违反了 Objective-C
2-3.【OC】【内存管理】autorelease 在 MRC 下到底做了什么?
在 MRC 下,autorelease 的本质是 “延迟释放” 。它既不是立即销毁对象,也不是增加引用计数,而是将对象的所有权转交给了一个名为 AutoreleasePool(自动释放池) 的管理器。
2-2.【OC】【内存管理】alloc / new / copy / mutableCopy 与 retain 在“所有权”上的本质区别是什么?
虽然这五个操作最终都会导致对象的“引用计数(Reference Count)”增加,但从所有权(Ownership)的哲学和内存物理演进来看,它们有着本质的区别。 我们可以把 alloc/new/co
2-1.【OC】【内存管理】MRC 下,“谁拥有对象?谁负责释放?”的准确判定规则是什么?
在 MRC(Manual Reference Counting)时代,判定“谁负责释放”并不看心情,而是遵循一套极其严苛的、基于方法名关键字的黄金法则。 这套规则由苹果定义,本质上是把 C 语言对内存
1-20.【OC】【基础】在什么场景下,你会刻意避免使用 Objective-C 方法调用,而改用 C 函数或静态方法?
虽然 Objective-C 的消息机制带来了极大的灵活性,但在某些对性能、安全或确定性有极致要求的场景下,开发者会选择“跳过” objc_msgSend,转而使用 C 函数或 C++ 静态方法。 以
1-19.【OC】【基础】Objective-C 的方法调用和 C 函数调用,在 ABI 层面有什么本质不同?
从 ABI(应用二进制接口) 的层面来看,Objective-C 的方法调用与 C 函数调用的区别,本质上是**“直接跳转”与“间接分发”**的对立。 在二进制指令级别,这两者的处理方式决定了它们的执
1-18.【OC】【基础】Method Cache 的作用是什么?
Method Cache(方法缓存) 的作用可以用四个字概括:变慢为快。 如果没有缓存,Objective-C 每一行 [obj message] 都要经历昂贵的方法列表遍历和继承链递归查找。而 Me
1-17.【OC】【基础】为什么 Objective-C 的方法调用“看起来慢”?
Objective-C 的方法调用“看起来慢”,是因为它在底层将函数调用变成了数据库查询。 在传统的 C++ 或 Swift 中,调用方法通常是直接跳转到内存地址(静态派发)或查找偏移量固定的虚函数表
1-16.【OC】【基础】objc_msgSend 的完整调用流程是怎样的?
objc_msgSend 是 Objective-C 的灵魂。为了保证极高的执行效率,它的核心逻辑是用汇编语言编写的。其调用流程可以分为三个阶段:消息发送(快速与慢速路径) 、动态方法解析、消息转发。
1-15.【OC】【基础】为什么 Swift 的 struct / enum 很难完整桥接到 Objective-C?
Swift 的 struct(结构体)和 enum(枚举)无法完整桥接到 Objective-C,本质上是因为 Swift 迈向了“现代静态语言”,而 Objective-C 仍被锁死在“80 年代
1-14.【OC】【基础】为什么 Objective-C 可以在运行时动态添加方法?
Objective-C 之所以能在运行时动态添加方法,是因为它在底层将“类”设计成了一个可变的数据结构,并且拥有一套基于名称查找而非地址偏移的消息分发系统。 这可以从以下三个层面来透彻理解: 1. 类
1-13.【OC】【基础】Objective-C 是如何支持继承链方法查找的?
Objective-C 的继承链方法查找,本质上是围绕 objc_msgSend 函数展开的一场在 objc_class 结构体 之间的递归搜索。 由于 Objective-C 的动态性,它不会在编译
1-12.【OC】【基础】如果你拿到一个 Class 对象,它在内存中本质上是什么?
在内存中它本质上是一个 objc_class 结构体。 虽然在 Objective-C 层面它看起来是一个神秘的“类”,但在 C 语言底层,它是一个有着固定格式的、存储了该类所有“配置信息”的单例结构
1-11.【OC】【基础】isa 指针在现代 Objective-C 中经历了哪些演进?
sa 指针从一个“纯粹的内存地址”变成了一个“高度压缩的复合数据结构”,这标志着 Apple 从“追随标准 C 结构”向“极致利用硬件性能”的转型。 以下是 isa 指针经历的三个主要阶段: 1. 早
1-10.【OC】【基础】解释 实例对象 / 类对象 / 元类对象 的关系
在 Objective-C 中,实例、类、元类之间的关系被称为 “isa 指针走线图” 。这套设计是 Objective-C 能够实现“万物皆对象”和“运行时动态查找方法”的核心。 它们三者的关系可以
下一页