首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Objective-C
项阿丑
创建于2026-02-04
订阅专栏
OC相关知识整理
暂无订阅
共188篇文章
创建于2026-02-04
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
8-2.【OC】【NSOperation】OperationQueue 内部是如何调度 Operation 的?
OperationQueue 的调度机制可以看作是一个高度智能的任务管家。虽然它的底层完全构建在 GCD 之上,但它引入了一套复杂的“准入与执行”逻辑,通过状态机管理来决定哪一个 Operation
8-1.【OC】【NSOperation】NSOperation 与 GCD 的异同?
在 iOS 多线程开发中,NSOperation 与 GCD(Grand Central Dispatch)的关系可以类比为:NSOperation 是对 GCD 的高级面向对象封装。 虽然底层都利用
7-15.【OC】【RunLoop】如何结合 RunLoop / Timer / Observer 来做高精度 UI 动画或 FPS 统计?
要实现高精度的 UI 动画或精准的 FPS 统计,核心思路是摆脱主线程业务逻辑的干扰,直接监听屏幕刷新信号(Vsync)与 RunLoop 的状态切换。 以下是结合这三大组件实现高级性能监控和动态渲染
7-14.【OC】【RunLoop】Timer 捕获 self 的 ARC 语义与 Block 捕获规则有什么相似或不同?
这是一个非常深入的切入点。虽然两者在表现上都会导致“循环引用”,但在 ARC(自动引用计数) 的底层处理逻辑和“谁在持有谁”的权力结构上,有着本质的区别。 1. 相似之处:强引用的结果 无论是 Tim
7-13.【OC】【RunLoop】Timer / DisplayLink 的销毁时机为什么重要?
Timer 和 CADisplayLink 的销毁时机之所以至关重要,是因为它们的设计深度耦合了 内存管理(ARC) 、线程生命周期 以及 CPU/GPU 资源消耗。 如果销毁时机不当,轻则导致内存泄
7-12.【OC】【RunLoop】NSTimer 放在非主线程或非默认 Mode 下会发生什么?
将 NSTimer 放在非主线程或非默认 Mode 下,会直接触及 RunLoop 的底层调度机制。这通常是“定时器失效”或“线程内存泄露”的主要诱因。 以下是两种场景下的具体表现与底层原因: 1.
7-11.【OC】【RunLoop】CADisplayLink 的使用场景和与 NSTimer 的区别是什么?
CADisplayLink 是一个特殊的定时器,它与屏幕的刷新频率(Vsync 信号)完全同步。在 iOS 开发中,它是处理高性能动画和游戏循环的首选工具。 1. 核心区别:同步机制与精度 虽然两者都
7-10.【OC】【RunLoop】NSTimer 的正确创建方式和销毁姿势是什么?
要正确使用 NSTimer(或 Swift 中的 Timer),必须平衡好 RunLoop 模式、内存管理和线程安全这三个维度。 1. 正确的创建姿势 根据应用场景的不同,创建方式分为两类: A. 自
7-9.【OC】【RunLoop】NSTimer 为什么容易产生 retain cycle?
NSTimer 产生循环引用(Retain Cycle)的根本原因在于其 设计模式 与 内存管理机制 之间的冲突。 1. 核心矛盾:谁持有谁? 在常规的委托(Delegate)模式中,通常是 weak
7-8.【OC】【RunLoop】CFRunLoopMode / NSRunLoopMode 的 Mode 切换是如何影响事件调度的?
RunLoop 的 Mode 切换本质上是一场事件源的“物理隔离” 。它通过在运行时动态切换数据集合,强制让线程只关注当前模式下的任务。 我们可以从底层数据结构和调度逻辑两个维度来剖析这一过程: 1.
7-7.【OC】【RunLoop】RunLoop 的退出条件是什么?如何主动让 RunLoop 停止?
unLoop 的生命周期管理非常严谨。要理解它的退出,首先要明白它的运行核心——Mode Item。如果一个 Mode 里没有任何任务可做,RunLoop 就像失去了燃料的引擎,会自动熄火。 1. R
7-6.【OC】【RunLoop】RunLoop observer 可以用来做哪些高级监控或优化?
CFRunLoopObserver 是深入 iOS 性能底层的“探针”。通过监听 RunLoop 的状态切换,可以实现许多在普通业务层无法完成的系统级优化。 以下是 Observer 的四大高级应用场
7-5.【OC】【RunLoop】RunLoop 的循环机制是怎样的?
RunLoop 的循环机制本质上是一个受操作系统内核(Mach)驱动的 Event Loop。它通过一套精密的状态机,确保线程在有事做时全速运行,在无事做时进入真正的“深度睡眠”,从而平衡响应速度与能
7-4.【OC】【RunLoop】主线程卡顿的根源与 RunLoop 有哪些关系?为什么 UI 更新和事件处理会被阻塞?
主线程卡顿的根源与 RunLoop 有哪些关系?为什么 UI 更新和事件处理会被阻塞?CFRunLoopObserver 如何用来调试卡顿? 主线程卡顿(Jank)的本质是 RunLoop 的循环频率
7-3.【OC】【RunLoop】RunLoop 的三大入口 / 三大组件是什么?并说明各自职责。
从底层的 CFRunLoop.c 源码结构来看,RunLoop 的运行完全依赖于它的三个核心组件。通常我们称之为 Source、Timer 和 Observer。 这三个组件被统称为 Mode Ite
7-2.【OC】【RunLoop】RunLoop 的 Mode 有什么真实意义?为什么 NSTimer 在不同 Mode 下表现不同?
RunLoop 的 Mode(模式) 是 iOS 性能优化的核心设计。它的真实意义在于隔离:通过将不同类型的事件(Source/Timer/Observer)分发到不同的组里,确保在执行高优先级任务(
7-1.【OC】【RunLoop】CFRunLoop 与 NSRunLoop 的关系是什么?它们共享数据结构吗?性能差异在哪里?
在 iOS 和 macOS 开发中,RunLoop 是维持应用持续运行的核心机制。理解 NSRunLoop 与 CFRunLoop 的关系,本质上是理解 Foundation 框架与 Core Fou
6-15.【OC】【KVC/KVO】在现代项目中,如果想替代 KVO,有哪些可行方案?
1. 原生首选:Swift 属性观察器 (didSet / willSet) 这是最简单、性能最高,也是最符合 Swift 直觉的方案。 适用场景: 类内部逻辑、简单的组件间通信。 优点: 强类型检查
6-14.【OC】【KVC/KVO】KVO 在 ARC 下是如何管理 observer 的引用的?弱引用 / 强引用,Runtime 是怎么实现的?
KVO 在 ARC 下依然使用“不安全且不自动置为 nil”的原始指针(unsafe_unretained)来管理观察者。 它既不是强引用,也不是弱引用(Weak)。这种设计是导致 KVO 容易崩溃的
6-13.【OC】【KVC/KVO】Swift 的 KVO 为什么这么别扭?
Swift 的 KVO 让人感到“别扭”,本质是因为 KVO 是 Objective-C Runtime 的强行产物,而 Swift 是一门强类型、静态且追求内存安全的现代语言。 这种冲突体现在机制底
下一页