1. 背景
PaintCode是一款面向iOS和Mac应用开发者及设计师的矢量图形可视化开发工具。它可以让设计师把设计好的psd文件直接导入该工具,然后生成用Quartz 2D 产生的object-c代码。直接供程序员使用,而省略了图片资源。
1.1主要功能
- 直接生成适用于iOS的Objective-C代码,节省了大量的编程时间。
- 生成的代码支持ARC/MRC,iOS5+/6+/7+.
- 可以控制图片生成的Frame、颜色等变量来动态生成需要所需要的图片。
1.2 相关资料:
官网:http://www.paintcodeapp.com/
http://blog.csdn.net/lujunelong/article/details/18899913
2. 实验数据
2.1实验一:复杂图片
背景:采用一张较为复杂的图片, 400*400。体积为:37k。
只提供了2X的图片(已压缩);支持armv7 armv7s arm64。
|
paintCode |
UIImage |
安装包大小 |
342k |
379k |
占用内存 |
3.4M |
3.8M |
real mem: |
12.25M |
13.3M |
耗时 |
0.054807(跟踪发现就一个地方耗时) |
0.0087 |
描述:
- 安装包大小在paintCode下有明显减小(即使已经支持了arm64,仍然能减小,且图片还没有支持1x和3x的图片效果明显)
- real men和占用内存paintCode都有明显减小
- 耗时有较大提升。性能差距加大。
2.2 实验二:简单图片
背景:采用一张较为简单的图片, 224*90。体积为:2k。
安装包大小 |
paintCode(armv7 armv7s arm64) |
UIImage(armv7 armv7s arm64) |
1份代码or图片 |
380k |
381k |
3份代码or图片 |
396k |
385k |
安装包大小 |
paintCode(armv7) |
UIImage(armv7) |
1份代码or图片 |
215k |
217k |
3份代码or图片 |
216k |
221k |
描述:
- 如果仅仅是打armv7的包,使用paintCode安装包大小有减小。有收益。
- 针对简单图片做了3份,使用paintCode在同时支持arm64的情况下,体积收益不一定要大于使用图片。
2.3 实验三:耗时测试
背景: 复杂图片就如实验一,简单图片资源参考图片二
方式 |
耗时(秒) |
简单button的paintCode |
0.006329 |
imageWithContentsOfFile |
0.000797 |
imageNamed(第一次) |
0.009291 |
复杂paintCode |
0.061804 |
描述:
- 复杂的paintCode耗时会较长。
- 简单button的PaintCode耗时数量级在毫秒级
- 一份代码可以支持多个屏幕,针对Iphone6,iphont6+没有体积增加。
- 显示效果较好,矢量拉伸。
- 有效减小内存使用。
- 在复杂大图下,可以有效减少安装包大小。
- 如果针对armv7 arm64进行编译,跟直接使用图片比浪费体积。
- 生成UIImage耗时比使用直接图片时间长。
3. 风险点&优势
3.1 优势
- 一份代码可以支持多个屏幕,针对Iphone6,iphont6+没有体积增加。
- 显示效果较好,矢量拉伸。
- 有效减小内存使用。
- 在复杂大图下,可以有效减少安装包大小。
- 如果针对armv7 arm64进行编译,跟直接使用图片比浪费体积。
- 生成UIImage耗时比使用直接图片时间长。
3.2 劣势
- 如果针对armv7 arm64进行编译,跟直接使用图片比浪费体积。
- 生成UIImage耗时比使用直接图片时间长。
4. 进一步优化
为了解决耗时问题, 给paintCode生成的图片做一个缓存,缓存到磁盘。下次使用直接取缓存。提升效率。
备注:
- 使用文件名+尺寸+特殊参数组成图片名称存储到磁盘中。
- 缓存的图片不要进入icloud。让每个机器分别创建。
- 缓存的图片加入一个过期淘汰机制,注意尽量不要让应用中所有图片在同一时间重建。
- 进入加入Server开关,可以强制客户端缓存清除。
5. 总结
PaintCode可以对内存大小、安装包大小的控制起到一定作用。但它还是有很多的限制因素。
5.1建议使用PaintCode的场景:
- 图片较为复杂、体积较大。
- 要为不同屏幕生成多套图片。
比如:首页启动的Loading图片。新手引导。