一、删除不再使用的资源
这里的资源文件主要指图片资源。获取的实现步骤如下:
- 获取资源文件(find命令)
- 设置资源类型(jpg,gif,png,webp)
- 正则匹配图片名
- 集合取差集
- 匹配编号规则
- 删除无用图片
工具名:LSUnusedResources
从github上下载源码运行,即可生成工具。
FengNiao也可以删除不再使用的图片资源。
二、图片压缩(Webp)
目前常用的图片格式:jpg,png,gif。
几种图片格式的区别如下:
JPEG—照片的标准格式,不支持透明。
GIF—被限制在256色因此对于大块纯色和简单图像非常好。它支持透明但是会产生锯齿边缘。
PNG—.jpg和.gif的漂亮结合,具有.jpg图片的质量和.gif的透明度,而且没有锯齿。
文件大小和系统支持方面的对比
- 同个分辨率的图片,保存为png要比jpg大;
- png图片有alpha通道,因此它支持图片透明,这点在ios开发中尤为重要;而jpg不支持透明.
- xcode会对png格式进行特殊的优化处理,而对于其他图片不做处理.
对于本地化的图片资源,我们一般都使用 .png格式的,对于从网络远程加载的图片资源,之前使用的是.jpg格式的。但是在实际的使用中发现,效果不是很理想,但遇到加载高清大图时候,还是会出现由于图片占用内存过高导致的carsh。于是把图片格式转向了网上兴起的流行的webp格式。
为什么使用webp
1.webp格式的优点
- webp 压缩率高支持有损与无损压缩
- webp 体积大幅减小,肉眼看不出差异
- webp 支付alpha透明 和 24-bit颜色数,不像PNG8色彩不够出现毛边,GIf转Animated webp有损可减少64%,无损减少19%。
- 小于256色适合无损压缩,压缩率高,参数使用lossles -q 100
- 大于256色使用75%有损压缩,参数 -q 75
- 远大于256色使用75%以下压缩率,-q 50 -m6
2.webp格式的缺点
- 较png消耗2倍左右CPU和解码时间
- 全平台支持不够。不过在iOS上可以通过对应的iOS的webp解析库解析。
对于iOS开发者来说,webp的支持库还是蛮多的。
- webp项目主页
- iOS webp解析库
- SDWebImage
- 使用pod管理第三方库的同学,可以在pod文件中添加 pod 'SDWebImage/WebP'语句,更新pod库安装webp的支持库。(注:使用pod安装此库需要VPN的支持)
新版的SDWebImage对webp格式判断的核心代码如下:
#import "NSData+ImageContentType.h"
@implementation NSData (ImageContentType)
+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data {
if (!data) {
return SDImageFormatUndefined;
}
uint8_t c;
[data getBytes:&c length:1];
switch (c) {
case 0xFF:
return SDImageFormatJPEG;
case 0x89:
return SDImageFormatPNG;
case 0x47:
return SDImageFormatGIF;
case 0x49:
case 0x4D:
return SDImageFormatTIFF;
case 0x52:
// R as RIFF for WEBP
if (data.length < 12) {
return SDImageFormatUndefined;
}
NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
return SDImageFormatWebP;
}
}
return SDImageFormatUndefined;
}
三、删除工程中不再使用的代码
现在的App都是经过多次的版本迭代开发出来的。我们在版本迭代的过程中,因为需求的变化,或多或少的有一些类或者方法在后续的版本中我们不在使用,而我们又没有来得及及时删除,而这些代码对于我们生成的包的大小还是有一些影响的。
因为虽然那些类和方法不在使用,但是在编译打包的时候,它们还是会生成对应的符号表。所以为了我们的包大小,我们应该检查,删除那些不再使用的类和方法。另一方面删除那些不在使用的类和方法,也有利于我们后续的代码维护和升级。
对于删除不再使用的代码,第三方开发工具AppCode本身自带这个功能。但是有一些小缺陷,使用的同学,自己去查询。
四、代码结构重构
代码重构与上面的删除不再使用的代码是类似的,但是代码重构对于开发者的要求更高一些。代码重构是对一个或者或者几个类的重复代码的抽象封装,使我们的代码看上去更清晰,复用性更好。代码重构还能很好的锻炼我们的逻辑思维和代码提炼能力。代码重构对于项目瘦身也能起到一定的帮助。
对于代码重构 SameCodeFinder能帮助我们快速分析出那些文件中的代码相似度,可以着重考虑重构。
SameCodeFinder链接里有详细的使用说明。