在开发中不可避免会遇到项目的优化,可能是内存的管理,可能是包的管理和性能的优化等,在这就说一下一些常见的优化方式手段。
一:模块划分
1.对项目中一些模块,类,扩展等有一个良好的划分
二:应用瘦身
1.清理出一些未使用的图片,可以使用一些工具脚本找出项目中未使用的图片,结果不是非常准确,但是可以自行判断(网上找到的一个python脚本,仅供参考:https://github.com/lefex/TCZLocalizableTool/blob/master/LocalToos/unUseImage.py)
2.图片的压缩可以使用[ImageOptim](https://imageoptim.com/howto.html)
3.代码的瘦身,[LinkMap](https://github.com/huanxsd/LinkMap)
三:性能优化
1.内存 使用instruments leaks 检测 打开: Product -> Profile -> Leaks点击CellTree、下方筛 选定位泄漏代码,修改工具只是辅助你寻找泄漏的地方,具体是否泄漏还需要自行判断
2.卡顿,图片的丢帧,屏幕的刷新率FPS动画或滑动的效果
3.图形的渲染优化
4.离屏渲染
5.启动优化
四:合理利用runtime机制
使用RunTime 尽量避免 crash
程序运行中难免会出现崩溃,这里我们可以使用runtime尽量避免一些常见的崩溃错误: eg: 给NSArray 替换 objectAtIndex:方法
+ (void)load {
[NSClassFromString(@"__NSArrayI") swapMethod:@selector(objectAtIndex:) currentMethod:@selector(mq_objectAtIndex:)];
}
- (id)mq_objectAtIndex:(NSUInteger)index
{
if (index >= [self count])
{
return nil;
}
return [self mq_objectAtIndex:index];
}
- (void)swapMethod:(SEL)originMethod currentMethod:(SEL)currentMethod;
{
Method firstMethod = class_getInstanceMethod(self, originMethod);
Method secondMethod = class_getInstanceMethod(self, currentMethod);
method_exchangeImplementations(firstMethod, secondMethod);
}
Load方法替换 objectAtIndex 为 mq_objectAtIndex ,当调用objectAtIndex时会走到mq_objectAtIndex,判断是否越界,以此来预防数组越界的crash 其他类像NSDictionary、NSString也可以自行添加
iOS项目优化还有挺多方面的,包括电池优化等等
参考链接:
https://juejin.cn/post/6940919835308064799
https://www.jianshu.com/u/1e8432e01e5a
网友评论