设计的动机和目标
- 降低开发门槛
- 在UI开发领域,描述性语音是最佳方式
- 数据驱动
- 实时预览 preview
DSL
竞品
SwiftUI组件系统
- 内置组件
- 简化布局系统(flex)
心存善念,必有善行;善念善行,天必佑之。
1 | class NavigationController: UINavigationController { |
1 | 模拟信号数字化必须经过三个过程,即抽样、量化和编码,以实现话音数字化的脉冲编码调制(PCM,Pulse Coding Modulation)技术 |
-
编码常见的音频编码格式: MP3、AAC、WAV
Category | 是否允许音频播放/录音 | 是否打断其他不支持混音APP | 是否会被静音键或锁屏键静音 |
---|---|---|---|
ambient | 只支持播放 | ❎ | ✅ |
soloAmbient (默认) | 只支持播放 | ✅ | ✅ |
playback | 只支持播放 | ✅,可以重写为❎ | ❎ |
record | 只支持录制 | ✅ | ❎(锁屏下仍可录制 |
playAndRecord | 支持播放,支持录制 | ✅,可以重写为❎ | ❎ |
audioProcessing | 不支持播放,不支持录制 | ✅ | ❎ |
multiRoute | 支持播放,支持录制 | ✅ | ❎ |
在cellForRowAtIndexPath:回调的时候只创建实例,快速返回cell,不绑定数据。在willDisplayCell: forRowAtIndexPath:的时候绑定数据(赋值)
在tableView滑动时,会不断调用heightForRowAtIndexPath:,当 cell 高度需要自适应时,每次回调都要计算高度,会导致 UI 卡顿。为了避免重复无意义的计算,需要缓存高度
(Dictionary, NSCache)
FDTemplateLayoutCell
ASDK 的作者是 Scott Goodson (Linkedin),
他曾经在苹果工作,负责 iOS 的一些内置应用的开发,比如股票、计算器、地图、钟表、设置、Safari 等,当然他也参与了 UIKit framework 的开发。后来他加入 Facebook 后,负责 Paper 的开发,创建并开源了 AsyncDisplayKit。目前他在 Pinterest 和 Instagram 负责 iOS 开发和用户体验的提升等工作
文本和布局的计算、渲染、解码、绘制都可以通过各种方式异步执行,但 UIKit 和 Core Animation 相关操作必需在主线程进行。ASDK 的目标,就是尽量把这些任务从主线程挪走,而挪不走的,就尽量优化性能
视图的惰性加载:ASDisplayNode对UIView封装,它可以在后台线程创建和修改,直到第一次在主线程访问 view 或 layer 属性时,它才会在内部生成对应的对象
图片解码的时机
iOS从磁盘加载一张图片,使用UIImageVIew显示在屏幕上,需要经过以下步骤:
在子线程对图片原始数据强制解码,然后把解码后的图片通过主线程加载 (Core Graphics 框架的 CGBitmapContextCreate)
异步方法封装成同步
1 |
|
1 | - (NSInteger)methodSync { |