移动端图片格式调研

图片通常是移动端流量耗费最多的部分,并且占据着重要的视觉空间。合理的图片格式选用和优化可以为你节省带宽、提升视觉效果。在这篇文章里我会分析一下目前主流和新兴的几种图片格式的特点、性能分析、参数调优,以及相关开源库的选择。

(更多…)

iOS JSON 模型转换库评测

iOS 开发中总会用到各种 JSON 模型转换库,这篇文章将会对常见的几个开源库进行一下评测。评测的内容主要集中在性能、功能、容错性这几个方面。

评测的对象:

Manually
手动进行 JSON/Model 转换,不用任何开源库,可以进行高效、自由的转换,但手写代码非常繁琐,而且容易出错。

YYModel
我造的一个新轮子,比较轻量(算上 .h 只有 5 个文件),支持自动的 JSON/Model 转换,支持定义映射过程。API 简洁,功能也比较简单。

FastEasyMapping
Yalantis 开发的一个 JSON 模型转换库,可以自定义详细的 Model 映射过程,支持 CoreData。使用者较少。

JSONModel
一个 JSON 模型转换库,有着比较简洁的接口。Model 需要继承自 JSONModel。

Mantle
Github 官方团队开发的 JSON 模型转换库,Model 需要继承自 MTLModel。功能丰富,文档完善,使用广泛。

MJExtension
国内开发者”小码哥”开发的 JSON 模型库,号称性能超过 JSONModel 和 Mantle,使用简单无侵入。国内有大量使用者。

(更多…)

最近一段时间的工作整理

正式转为全职 iOS 工程师已经有一年多了,这一年里工作并不忙,使得我有更多的时间和精力来研究些有意思的东西。最近整理了下这一年攒下来的代码,拆分成了几个库,在接下来的一段时间内会陆续开源:

YYModel 类似 Mantle/JSONModel 的工具,性能比 Mantle 高一个数量级,有更好的容错性,更简洁的 API。
YYCache 类似 TMCache 那样的工具,有着更好的性能,支持 LRU,磁盘缓存支持 SQLite。
YYImage iOS图像库,支持高性能的 APNG/WebP/GIF 动图播放、编码和解码,支持帧动画等。
YYWebImage 类似 SDWebImage 的工具,基于 YYImage 和 YYCache,有更好的性能、更丰富的功能。
YYText UILabel 和 UITextView 的开源实现,支持异步排版渲染、图文混排、更多文字特效/点击效果、动画/表情输入、竖排版等。

YYKeyboardManager 从 YYText 分离出来的一个键盘监听工具,能实时监听和获取键盘视图、位置、动画。
YYDispatchQueuePool 从 YYText 分离出来的一个很简单的队列管理工具,用于管理全局并发任务。
YYAsyncLayer 从 YYText 分离出来的一个很简单的 CALayer 的子类,用于进行异步绘制和显示。
YYCategories Category 类型的工具库。

YYKit 上面所有工具的打包工具集,全部工具都兼容 iOS6~9。
YYKitDemo YYKit 的功能/性能演示,实现有 Twitter 和 Weibo 的 Feed 列表、发布视图,有着和官方 App 完全一致的 UI 和更流畅的交互体验。

每个库都会配有几篇博客来介绍相关技术、性能评测,这也算是我最近一年工作的总结吧。

深入理解RunLoop

RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。

(更多…)