首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Swift
项阿丑
创建于2026-01-27
订阅专栏
Swift相关知识整理
等 6 人订阅
共381篇文章
创建于2026-01-27
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
8-14.【内存管理机制】捕获列表如何避免循环引用?为什么捕获顺序有时会影响 ARC?
1. 捕获列表如何避免循环引用? 捕获列表(Capture List)通过**改变闭包捕获变量的“持有强度”**来打破循环。 循环引用的根源: 默认情况下,闭包对外部引用类型的捕获是强引用(Stron
8-13.【内存管理机制】[weak self] 与 [unowned self] 的底层内存行为有什么不同?
在 Swift 的底层,[weak self] 和 [unowned self] 的区别不仅在于是否为可选型(Optional),更在于它们如何与 HeapObject(堆对象) 的状态机以及 Sid
8-12.【内存管理机制】补充:闭包是值类型还是引用类型?闭包捕获变量的底层原理是什么?
1. 闭包是引用类型 在 Swift 中,闭包是引用类型(Reference Type) 。 当你将一个闭包赋值给变量或将其传递给另一个函数时,你实际上是在传递一个指向该闭包实体的指针,而不是拷贝闭包
8-11.【内存管理机制】在闭包中使用 unowned/self 和 weak/self 的区别和风险?
在 Swift 闭包捕获列表中使用 [unowned self] 或 [weak self],本质上是在性能风险与安全性之间做抉择。 虽然它们都能打破循环强引用(Retain Cycle),但底层的处
8-10.【内存管理机制】weak 引用的开销和限制有哪些?
从底层实现的角度来看,weak 引用虽然是解决循环引用的安全利器,但它并非“免费”的。其开销主要体现在 运行时性能、内存布局以及开发中的逻辑限制 三个方面。 以下是详细的拆解: 1. 运行时的性能开销
8-9.【内存管理机制】unowned 引用与 weak 引用有什么区别?使用场景是什么?
在 Swift 的内存管理中,unowned(无主引用)和 weak(弱引用)都用于打破循环强引用,但它们在安全性、底层实现、性能开销以及业务语义上有显著区别。 以下是深度的对比分析: 1. 核心区别
8-8.【内存管理机制】weak 引用如何保证安全?如何自动置 nil?
在 Swift 中,weak 引用之所以能实现“安全访问”和“自动置 nil”,并不是靠每秒扫描内存的后台进程,而是一套被称为 Side Table(侧表) 的精巧设计。 以下是这一过程的底层拆解:
8-7.【内存管理机制】strong、weak、unowned 引用在底层是如何存储和管理的?
在 Swift 的底层实现中,这三种引用的区别远不止是“自动置空”那么简单。它们实际上是通过操作 HeapObject 的位域(Bitfields)和引入 Side Table(侧表) 机制来管理的。
8-6.【内存管理机制】什么情况下 ARC 无法释放对象?为什么会产生内存泄漏?
在 Swift 的 ARC(自动引用计数)机制下,内存泄漏(Memory Leak)的本质是:对象的引用计数永远无法归零。 即便你已经不再使用这些对象,它们依然占据着堆内存,导致程序的内存占用持续上升
8-5.【内存管理机制】在大对象图中,ARC 的引用计数增加/减少会产生哪些性能开销?
在大对象图(Object Graph)中,ARC(自动引用计数)的性能开销不再仅仅是“加减法”那么简单。随着对象之间引用的复杂化和多线程环境的介入,ARC 会从内存带宽、CPU 指令流、甚至缓存一致性
8-4.【内存管理机制】ARC 如何处理线程安全问题?
ARC 的线程安全处理是一个关于权衡的设计。Swift 的核心目标是:保证引用计数操作的绝对安全,但不保证对象内容访问的安全。 为了实现这一点,Swift 在底层采用了以下几种机制: 1. 原子性操作
8-3.【内存管理机制】Swift 与 Objective-C 的 ARC 有哪些差异?
虽然 Swift 的 ARC 在概念上继承自 Objective-C,但在底层实现、性能优化以及处理边缘情况的方式上,两者有着显著的代差。 你可以将 Objective-C 的 ARC 看作是 “基于
8-2.【内存管理机制】ARC 的 retain/release 底层机制是什么?
ARC 的 retain 和 release 并非简单的加减法,它们是 Swift 运行时(Runtime)中一套高度优化的内存管理指令。其底层机制涉及 原子操作、内存屏障 以及针对不同对象状态的 多
8-1.【内存管理机制】Swift 的 ARC 是如何跟踪对象生命周期的?
Swift 的 ARC (Automatic Reference Counting) 是一种内存管理机制,它通过在编译阶段自动插入 增加(retain) 和 减少(release) 引用计数的代码,来
7-30.【高级特性】Existential Container 带来的性能成本、内存布局和方法派发开销是什么?
在 Swift 中,当你使用 any Protocol(存在类型)时,编译器会通过 Existential Container(存在容器) 来抹除具体类型。这种灵活性并非免费,它在内存布局、性能损耗和
7-28.【高级特性】多重协议组合会对类型系统和性能带来哪些成本?
使用 protocolA & protocolB & protocolC 这种多重协议组合虽然极大地增强了代码的灵活性,但在底层,它会对类型系统的推断压力、内存布局以及运行时的分发性能产生一系列连锁反
7-26.【高级特性】associatedtype 与 opaque type 的区别和组合使用场景?
associatedtype 和 opaque type (some) 分别代表了抽象的两个阶段:一个是定义阶段的占位符,一个是实现阶段的遮罩。 1. 核心区别:谁在控制类型? 理解这两者的区别,本质
7-25.【高级特性】如何设计协议时使用 associatedtype 实现可替换和灵活的模块边界?
在设计模块化系统时,associatedtype 是解耦“逻辑流程”与“具体实现”的神兵利器。它的核心设计哲学是:由协议定义业务契约,由注入的组件决定数据模型。 通过 associatedtype 实
7-24.【高级特性】associatedtype 的用途是什么?为什么不能直接用泛型替代?
简单来说,associatedtype(关联类型)是协议(Protocol)中的泛型占位符。 虽然它和函数或结构体中的泛型(Generic Parameters,如 <T>)目标一致(都是为了抽象类型
7-23.【高级特性】如何利用 where 子句实现复杂泛型逻辑,例如“数组元素遵守协议并满足 Equatable”?
在 Swift 中,where 子句是处理这种“多重约束”或“跨类型逻辑”的终极工具。要实现你提到的“数组元素既遵守某个自定义协议,又必须满足 Equatable”的逻辑,最优雅的方式是结合 扩展(E
下一页