* 由于公司需要,对,仍然是由于公司需要,最近调研了一遍常用的第三方库,按功能分类,综合 GitHub 上 Star 的数量,最近更新的时间,百度、谷歌搜索(把这个列入参考的目的是考虑到开发过程中可能遇到种种问题,需要面向搜索编程,检索出的条目越多就越容易解决问题,另一方面也证明有很多人使用。)的条目数量,和实际使用体验得出比较适合稳定持续开发使用的框架。*
一、Log 输出打印调研
1.CocoaLumberjack(OC)
使用体验:非常容易上手。导入需要使用的类,pod install 就可直接运行。demo 可直接运行,自建工程导入框架也都流畅运行。
2.NSLogger(OC)
使用体验:demo 无法正常运行,文档描写不清晰。自建工程导入框架按照文档实现方法,报错。
3.SwiftyBeaver (Swift)
*使用体验:有一定门槛,但上手后操作非常简单。swift 上测试成功,oc 有报错问题。有配套软件,可接收来自 App 端打印的数据,配置 App id 和 App key,免费版可保存数据云端一小时,收费版七天起。demo 无法直接运行,自建工程导入框架可流畅运行。 *
4.GodEye (Swift)
使用体验:demo 无法正常运行,导入后需要配置参数很多,尝试两次后仍旧无法运行后放弃。这个库的作者出了一本书,这个库大概为了宣传书籍而附带出的。
5.结论:推荐使用 CocoaLumberjack。
二、网络请求调研(包含缓存数据的存储)
1.AFNetworking
使用体验:简单易用,流畅。因为过往项目使用到过这个第三方库,所以就没有使用 Demo 测试框架。
2.YTKNetwork(基于 AFNetworking)
使用体验:因为公司项目使用到过这个第三方库,所以就没有使用 Demo 测试框架。
3.Alamofire(AFNetworking 同作者)(swift)
使用体验:导入框架后尝试 get 和 post 请求,成功。操作简单,和 AFNetworing 使用体验相似,值得一提的是,服务器返回数据不用再次转换,可直接根据服务器数据设置响应 handler。其他没有深入测试。数据缓存方面,Alamofire 是通过 NSURLCache 这个类来实现的。
4.Moya(基于 Alamofire)
使用体验:导入框架后尝试 get 和 post 请求,成功。比起 Alamofire 的优点是,我们实际使用 Alamofire 时,会根据我们的需求对 Alamofire 进行再次封装一个类以便区分和直接操作命令请求或者数据请求。Moya 相当于替我们完成了这一步,允许我们高度自定义他,根据具体的需求进行接口的设置。其他没有深入测试。使用有一定门槛。
5.结论:推荐主要使用 AFNetworking,猿题库的网络请求框架固然好用,但最近更新是一年前。因为作者相同,以及是对相同作者的库进行封装的两个库,对 Swift 的这两个框架可以保持关注。
三、iOS 数据库框架调研
1.fmdb
2.realm-cocoa (同时有OC、Swift 库以及 Java 库)
3.MagicalRecord
经过 单条多次插入数据性能对比、批量插入数据性能对比、数据查询性能对比、数据更新性能对比
- MagicalRecord数据库主要在主线完成,无论是插入、查询还是更新都有卡顿现象,暂时未找到多线程操作的方案,即使使用多线程也非常容。
- 跟两个表的操作性能对比来说,节省字段来提升性能并没有显的作用。
- 从插入数据的性能来说MagicalRecord最好,但CPU占用高,Realm表现最差接近是FMDB的三倍。而数据查询的话,还是Realm 有明显的优势是速度是其他2者的6、7倍,FMDB也和MagicalRecord相当。数据更新则是Realm表现最好,MagicalRecord略差。总体而言,FMDB的各方面表现比较均衡,Realm强在于查询性能好,但插入数据有明显性能问题。MagicalRecord总体来说数据插入性能最好的,coredata是做了内存缓存的优化,带来的问题就是在插入的数据在其他线程查询不到,面表现一般。
- MagicalRecord学习曲线陡峭,不适合使用多线程,容易出错,出错后不好排查。FMDB需要写sql语句,实现的代码量较大,优势在于各方面性能均衡。Realm简单易学,代码简洁,主要的缺点还是数据插入的性能不好。