# Swift 与运行时

语言：zh-CN
原文：[Swift 与运行时](<https://allluckly.cn/journal/topics/swift-runtime/>)
中文：[中文 HTML](<https://allluckly.cn/journal/topics/swift-runtime/>)
English: [English HTML](<https://allluckly.cn/en/journal/topics/swift-runtime/>)

DEVELOPMENT NOTES · 15 篇

从 Swift 2、Swift 3 的学习笔记，到 Objective-C 运行时与设计模式，这里保留的是理解语言行为的过程。语法会变化，追问“这段代码为什么这样执行”仍然有用。

## 怎么读这一组

1. 初读可从协议代理、Block 与 Swift 常见陷阱开始，先分清值、引用、闭包捕获和对象生命周期。
2. 看 runtime 文章时，按属性与变量、消息机制、字典转模型的顺序梳理；把运行时能力与具体项目里是否需要使用分开考虑。
3. 模板、单例、享元与职责划分适合对照阅读。先写出要解决的重复代码或共享状态问题，再判断模式是否合适。

这是 2015–2017 年的历史记录，示例未在本次整理中重新运行验证。先核对文章日期和版本说明，再决定哪些思路适合当前项目。

## 主题文章

15 篇 · 新到旧

- 2016-11-07 

  ### [iOS开发之位运算](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao69>)

  从按位与、或、异或和取反讲起，以 RGBA 颜色打包及状态标志为例展示位运算用途，再说明如何用枚举与掩码保存和查询多个状态。

  Sindri 位运算 · 位掩码 · RGBA
- 2016-10-27 

  ### [iOS开发之均衡代码职责浅谈](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao68>)

  围绕 MVC 中控制器过于庞大的问题，用项目示例讨论视图、模型和控制器的职责分配，提取重复逻辑并调整功能归属，强调在更换架构名称之前先理清代码责任。

  Sindri MVC · 职责划分 · 重构
- 2016-10-13 

  ### [Swift3.0学习系列之Swift实战-单例模式](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao67>)

  介绍 Swift 单例的用途与代价，通过类内静态常量和全局常量两种形式创建共享实例，说明私有构造器、跨模块访问，以及共享可变状态仍需考虑线程安全。

  Sindri Swift 3.0 · 单例模式 · static let
- 2016-10-13 

  ### [Swift3.0学习系列之Swift实战-享元模式](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao66>)

  以共享本地数据管理对象为例介绍享元模式，使用字典复用已加载的数据并记录使用次数，在无人使用时保存和释放，讨论它与始终保留单例对象的差别。

  Sindri Swift 3.0 · 享元模式 · 对象复用
- 2016-09-01 

  ### [iOS开发之协议代理](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao57>)

  以 UITableView 和自定义控件为例区分协议与委托，比较 delegate 和 block 回调的使用场景，再讨论数据源与协议抽象如何帮助对象之间减少耦合。

  Sindri protocol · delegate · block
- 2016-08-16 

  ### [菜鸟进化史之RunTime实战字典转模型](<https://allluckly.cn/runtime/runtime>)

  从逐项赋值、KVC 和第三方模型库的使用经历出发，编写 NSObject 分类遍历运行时信息，把字典映射为模型，并说明示例对两层嵌套数据的处理范围。

  Bison Objective-C Runtime · 字典转模型 · KVC
- 2016-07-28 

  ### [iOS开发之去model化开发](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao56>)

  面对字段不同但展示相近的多种票券数据，使用字典承载数据并通过协议暴露统一展示属性，让 Cell 与控制器减少对具体模型类型的依赖，讨论数据转换职责的放置。

  Sindri 协议 · 去model化 · MVC
- 2016-06-29 

  ### [iOS开发Swift实战之模板模式](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao51>)

  以商品数据和计算逻辑为例，分析代码对元组结构的依赖，再用类型与协议组织可复用的处理方式，讨论如何通过抽象减少参数形式和业务方法之间的耦合。

  Sindri Swift · 模板模式 · 协议
- 2016-05-20 

  ### [iOS开发之从源代码看OC的消息机制runtime](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao47>)

  从 unrecognized selector 错误切入 Objective-C 消息机制，结合源码讨论方法查找、缓存与消息转发，再通过运行时相关示例理解方法调用如何在执行阶段完成。

  Sindri Objective-C Runtime · 消息发送 · 方法缓存
- 2016-05-04 

  ### [runtime实战之一键改变字体](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao43>)

  从注册自定义字体和查找字体名称开始，利用 Objective-C 运行时方法处理界面字体替换，并讨论代码创建控件与 storyboard 控件在统一设置时的差别。

  HenryCheng Objective-C Runtime · 自定义字体 · UIFont
- 2016-04-06 

  ### [iOS开发之学习block深入浅出](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao36>)

  从 block 的声明和调用方式讲起，讨论捕获外部变量与回调封装，再通过模仿 Swift 高阶函数的例子展示 block 在 Objective-C 数据处理中的用法。

  Sindri block · 变量捕获 · Objective-C
- 2016-03-01 

  ### [iOS开发之重构笔记-Extra Method](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao26>)

  结合《重构》的提炼函数方法，把冗长代码按意图拆成独立函数，逐步处理参数、局部变量和返回值，并用实际示例讨论如何降低重复逻辑和提升可读性。

  SindriLin 重构 · Extract Method · 函数提炼
- 2016-02-16 

  ### [详解Swift中的七个陷阱以及避免方法](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao21>)

  通过具体代码讨论 Swift 协议扩展、可选链赋值和函数式处理中的易错行为，比较值类型与引用类型的分派差异，并总结如何避免编译通过却不符合预期的结果。

  bestswifter Swift · 协议扩展 · 可选链
- 2016-01-16 

  ### [iOS开发黑魔法KVO的奥秘](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao05>)

  以监听列表滚动偏移为入口介绍 KVO，分析观察者注册后动态子类与 isa 指针的变化，并借助运行时函数尝试实现相似机制，串起使用方式和底层原理。

  SindriLin KVO · isa · 动态子类
- 2016-01-10 

  ### [黑魔法runtime基础之属性与变量](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao01>)

  区分 Objective-C 属性与成员变量，结合运行时结构、地址偏移和 synthesize 分析属性的生成方式，再通过示例说明动态检查与操作对象结构的用途。

  SindriLin Objective-C Runtime · property · ivar

