iOS性能优化相关知识(二)

**一、APP启动优化
1、app的启动分为两种:
1)冷启动(Cold Launch):从零开始启动APP
2)热启动(Warm Launch):APP已经存在内存中,在后台存活着,再次点击图标启动APP。
我们所说的启动优化就是针对冷启动进行优化。
我们可以在app中添加环境变量打印出APP的启动时间:
(edit scheme-> run -> arguments)将DYLD-PRINT_STATISTICS设置为1

image.png

image.png

添加完这个环境变量之后,再运行app,在打印日志中可以看到类似如下信息:
image.png

这段信息是我们点击app图标到程序执行main函数之前到一些操作的耗时。
如果我们想知道更详细的一些信息,可以通过修改环境变量来打印信息:
image.png

运行app之后可以看到打印信息如下:
image.png

一般app运行总时间在400毫秒以内属于正常范畴,如果超过400毫秒的话我们应该对app的启动时间做优化处理。
2、APP的冷启动可以概括为3大阶段
1)dyld,加载可执行文件和动态库
2)runtime,初始化类和分类
3)main,执行main函数调用didFinishLaunch方法
image.png

三、影响启动的因素:
动态库的加载,objC类多,C++静态库多,

四、启动优化:
1、减少动态库、合并或清理动态库
2、减少Objc类、分类的数量,减少Selector
3、 减少C++虚拟函数数量
4、swift尽量使用struct
5、少在load方法里面写逻辑代码,可以用initalize方法和dispatch_once取代
6、在不影响用户体验前提下,尽可能将一些操作延迟,不要全部都放在didFinishLaunching方法中
7、纯代码方式而不是storyboard加载首页UI

五、安装包瘦身
安装包ipa主要由可执行文件(源代码文件,编译链接产生)、资源(图片,音视频,storyboard,xib)组成。项目编译完生产app文件,app文件压缩后成ipa文件
1、资源采取无损压缩
2、去除没有用的资源, 使用LSUnusedResources这个项目来检查项目中没有使用到的资源
3、编译器优化:Strip Linked Product、Make Strings Read-Only、Symbols Hidden by Default设置为YES。 原理是打开这些后构建ipa会去除掉symbol符号,就是那些类和函数名。不会影响正常的崩溃日志生成和解析。
4、去掉异常支持,Enable C++ Exceptions、Enable Objective-C Exceptions设置为NO, Other C Flags添加-fno-exceptions
5、利用AppCode( 此为第三方工具)检测未使用的类和属性等代码:Code->Inspect Code
6、手动移除代码:第三方代码,没有直接用到的或者功能类似的移除掉
7、音视频和大图资源不要放到包里,可以从服务器端下载
8、图片放到assets.xcassets里面

你可能感兴趣的:(iOS性能优化相关知识(二))