首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
后端
前端
Android
iOS
人工智能
开发工具
代码人生
阅读
2-20.【OC】【内存管理】Swift 的 [weak self] 与 [unowned self] 的底层区别是什么?
在 Swift 中,[weak self] 和 [unowned self] 都是为了打破闭包产生的循环引用,但它们在 Runtime(运行时)安全性和引用计数底层实现上有着本质的区别。 简单来说:w
2-19.【OC】【内存管理】Swift 中 closure 的捕获语义与 OC block 的关键差异是什么?
虽然 Swift 的 Closure(闭包)在很多概念上继承了 Objective-C 的 Block,但在底层捕获语义和编译器优化上,两者有着本质的区别。 最核心的差异可以总结为一句话:Swift
2-18.【OC】【内存管理】 __block 在 MRC 和 ARC 下行为是否一致?
不一致。 虽然 __block 的核心目标(允许 Block 内部修改外部变量)在两个环境下是一样的,但它在内存管理语义上存在一个巨大的、甚至足以导致程序崩溃的差异。 1. 核心差异:是否会触发 Re
2-17.【OC】【内存管理】 Block 的变量捕获规则是怎样的?
Objective-C Block 的变量捕获规则是其最核心的机制。Block 为了保证在未来某个时刻执行时变量依然可用,会根据变量的类型和修饰符,采取截然不同的“打包”策略。 我们可以将其归纳为以下
2-16.【OC】【内存管理】Block 的三种存储类型分别是什么?
在 Objective-C 中,Block 本质上是一个封装了函数及其执行上下文(变量捕获)的 OC 对象。根据其内存存储位置的不同,Block 分为三种主要的存储类型。 你可以通过查看 Block
2-15.【OC】【内存管理】NSTimer 为什么必然导致循环引用?
说 NSTimer “必然”导致循环引用其实有些绝对,但在 iOS 10 / macOS 10.12 之前,如果你使用经典的 scheduledTimerWithTimeInterval:target
2-14.【OC】【内存管理】delegate 为什么通常用 weak?
在 Objective-C 和 Swift 开发中,delegate(代理)属性几乎约定俗成地使用 weak(在 MRC 下用 assign)。这背后的核心原因只有一个:防止循环引用(Retain C
2-13.【OC】【内存管理】ARC 是否意味着“没有性能成本”?
简单直接的答案是:不,ARC 不仅有性能成本,甚至在某些特定情况下比手动管理(MRC)还要高。 虽然 ARC 的初衷是自动化和安全,但“自动化”的代价是由 CPU 的时钟周期和内存开销来支付的。我们可
2-12.【OC】【内存管理】ARC 下为什么循环里创建大量临时对象容易内存暴涨?
在 ARC 环境下,循环中内存暴涨的根本原因在于:自动释放对象的“死亡时间”被推迟到了当前 RunLoop 的末尾。 虽然 ARC 帮我们省去了手写 release 的麻烦,但它依然遵循 Object
2-11.【OC】【内存管理】ARC 下,autoreleasepool {} 的底层结构是什么?
在 ARC 环境下,@autoreleasepool {} 看起来是一个简单的语法糖,但其底层是一套基于**栈(Stack)**结构的内存管理机制。 当你编写 @autoreleasepool {}
2-10.【OC】【内存管理】__unsafe_unretained 与 __weak 的底层差异是什么?
从底层实现来看,__unsafe_unretained 和 __weak 的差异本质上是 “原始指针” 与 “运行时托管指针” 的区别。 虽然它们都不增加引用计数,但处理对象销毁(Deallocati
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
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