首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
后端
前端
Android
iOS
人工智能
开发工具
代码人生
阅读
Swift中的分层缓存设计:平衡性能、内存与数据一致性的实践方案
引言:单一缓存策略的局限性 在移动应用开发中,缓存是提升性能的关键手段。然而,单一的缓存策略往往难以同时满足三个核心诉求:高性能、低内存占用和数据一致性。 内存缓存速度快但容量有限,磁盘缓存容量大但访
iOS自定义TabBar
DDTabBar 自定义 TabBar 技术文档 概述 DDTabBar 模块底部导航栏的自定义实现, 支持 普通样式 与 液态玻璃(Liquid Glass)样式 双形态切换。 支持暗黑模式和长辈模
如何在 iPhone 或 iPad 上删除文件
当存储空间不足时,从 iPhone 或 iPad 中删除文件是释放存储空间最简单的方法之一。然而,有时你可能会发现在 iPhone 或 iPad 上删除文件很困难。为了帮助你轻松删除文件,我们在本文中
AppLovin 危机升级:SDK 安全争议未平,建议移除为妙
背景 继 1 月做空机构 CapitalWatch 指控 AppLovin 深度涉入洗钱网络、关联东南亚 “杀猪盘” 后,这场资本风波的余震仍在持续。最新市场数据显示,截至 2026 年 2 月 5
RunLoop
以下是 Objective-C 中 RunLoop 的高频面试问题清单,涵盖基础概念、原理机制、线程关系、应用场景及实战排查,适用于中高级 iOS 开发岗位面试: 🔹 一、基础概念类 Q1:RunLo
4-30.【OC】【锁】在大型工程中,你会如何设计锁粒度与隔离策略?
在大型 iOS 工程中,设计锁粒度与隔离策略的目标是在数据安全性、执行性能与开发维护成本之间找到平衡。锁粒度过粗会导致主线程卡顿(如你提供的 slowlog_0 所示),锁粒度过细则会增加死锁风险。
4-29.【OC】【锁】主线程同步派发到主队列为什么必死锁?
这是一个非常经典且容易在面试中遇到的问题。在 iOS 开发中,执行 dispatch_sync(dispatch_get_main_queue(), ^{ ... }); 会产生立即且永久的死锁。 这
4-28.【OC】【锁】请画出“双锁反序”死锁的 wait-for graph。
“双锁反序”(AB-BA Deadlock)是多线程开发中最经典的死锁模型。当两个线程以相反的顺序请求两把相同的锁时,就会形成环路等待。 1. 场景描述 线程 1:已经持有 锁 A,正在尝试获取 锁
4-27.【OC】【锁】weak 引用表的同步机制是怎样设计的?
weak 引用表的同步机制是 Objective-C Runtime 中设计最精巧的部分之一,它必须在“高频访问”、“内存节省”和“多线程安全”之间取得平衡。 其核心设计可以概括为:多级哈希表结构 +
4-26.【OC】【锁】ARC 的 retain/release 路径中哪些地方涉及锁?
在 ARC(Automatic Reference Counting)环境下,retain 和 release 看起来只是简单的加减计数,但由于它们必须是线程安全的,其实内部逻辑非常复杂,涉及到多层级
4-25.【OC】【锁】atomic property 的实现是否真正线程安全?为什么?
在 Objective-C 中,atomic 属性的实现并不是绝对意义上的“线程安全”。 简单来说,atomic 只能保证属性的 Setter 和 Getter 操作本身是原子的(即读写完整),但无法
4-24.【OC】【锁】Objective-C runtime 内部有哪些关键锁?
Objective-C Runtime(libobjc)作为一个高度动态且线程安全的系统,其内部大量使用了不同类型的锁来保护全局表、方法缓存和类结构。 了解这些内部锁,能帮你理解为什么有些看起来简单的
4-23.【OC】【锁】os_unfair_lock 为什么是“不公平”的?
“不公平”(Unfair)在这里是一个计算机科学术语,主要指该锁不保证“先来后到”的排队顺序(First-In-First-Out, FIFO) 。 在传统的“公平锁”中,如果线程 A、B、C 依次尝
4-22.【OC】【锁】os_unfair_lock 如何避免优先级反转?
os_unfair_lock 是苹果在 iOS 10 中推出的 OSSpinLock 直接替代品。它能够规避优先级反转问题,核心在于它彻底改变了等待机制,并与内核调度器(Mach Kernel)进行了
4-21.【OC】【锁】priority inversion 在自旋锁中是如何产生的?
在自旋锁(Spinlock)中,优先级反转(Priority Inversion) 并非传统意义上的“多个线程竞争”,而是一种由于“忙等”机制导致的死锁状态。 其产生的核心逻辑如下: 1. 产生的前提
4-20.【OC】【锁】OSSpinLock 被废弃的真实原因是什么?
OSSpinLock 被废弃的真实原因在于它在 iOS 的线程调度机制下存在严重的 优先级反转(Priority Inversion) 风险,这会导致应用出现逻辑上的死锁或永久性卡顿。 虽然从代码逻辑
4-19.【OC】【锁】使用 semaphore 容易制造哪类隐蔽死锁?
在使用 dispatch_semaphore(信号量)时,最隐蔽且最常见的死锁类型是**“优先级反转导致的线程饥饿死锁”**,尤其是在 iOS 这种具有复杂优先级调度机制的系统中。 以下是该类死锁的详
4-18.【OC】【锁】semaphore = 1 与 mutex 在语义上有什么本质区别?
本质区别可以总结为:Mutex 是“所有权制”,而 Semaphore 是“信号制”。 1. 所有权 (Ownership):谁领的证,谁能离 这是两者最根本的区别。 Mutex(互斥锁): 具有 O
4-17.【OC】【锁】semaphore 不具备 ownership 会带来什么工程风险?
在工程实践中,由于 dispatch_semaphore(信号量)不具备 Ownership(所有权) ,它就像是一把“没有主人的锁”。这虽然提供了灵活性,但也直接导致了两个极具杀伤力的风险:优先级反
4-16.【OC】【锁】为什么 dispatch_semaphore 不是严格意义上的锁?
在并发编程的语境下,虽然我们经常把 dispatch_semaphore 当作锁来用(比如信号量设为 1),但从设计哲学和底层语义来看,它确实不是严格意义上的“锁”。 主要原因在于它缺乏锁的两个核心属
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