首页
沸点
课程
AI Coding
数据标注
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
后端
前端
Android
iOS
人工智能
开发工具
代码人生
阅读
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 能够实现“万物皆对象”和“运行时动态查找方法”的核心。 它们三者的关系可以
1-9.【OC】【基础】Objective-C 对象在内存中的最小结构是什么?
在 Objective-C 中,一个对象在内存中的最小结构本质上就是一个 C 语言结构体。它的“极简版”只包含一个成员,即指向类信息的指针。 1. 最小结构的定义 在 Runtime 源码(objc.
1-8.【OC】【基础】id、instancetype、Class 在类型系统中的本质区别是什么?
在 Objective-C 这个“混血”系统中,这三个关键字分别代表了绝对动态、编译期约束和元数据描述。我们可以通过它们的底层定义和在消息机制中的行为来拆解。 1. id:万能的动态指针 本质:指向
1-7.【OC】【基础】从工程演进角度看,Objective-C 的语言模型为什么很难再继续演进?
从工程演进的角度来看,Objective-C 并不是因为“功能不够强”而停滞,而是因为它那套 C 的物理布局 + Smalltalk 的动态消息 模型已经触及了现代软件工程的“兼容性天花板”。 以下是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30