iOS 之启动优化
2019-05-21 本文已影响0人
iOS小童
启动优化
应用启动过程中的一系列活动会影响初始加载时间,因此,为了获得更好的用户体验,必须使初始化活动的数量最小化。
启动方式
首次启动
安装应用的首次启动,没有之前的状态,也没有本地缓存。
- 确定在展示UI前必须执行的任务:如崩溃报告系统
- 按顺序执行任务:因为任务间可能具有相互依赖性
- 将任务拆分为两类:主线程/子线程
- 其他任务可以在加载UI后执行或异步执行:延迟其他系统的初始化
冷启动
应用后续的启动,在启动期间,可能需要恢复原来的状态
热启动
应用处于后台,但并未被挂起或者关闭时,用户切换至应用而触发的启动。
升级后启动
- 无本地缓存或者完全放弃缓存
- 本地缓存可用,可以直接使用或需要切换至升级版本
影响启动性能的因素
main()函数之前耗时的影响因素
-
动态库加载越多,启动越慢。
-
ObjC类越多,启动越慢
-
C的constructor函数越多,启动越慢
-
C++静态对象越多,启动越慢
-
ObjC的+load越多,启动越慢
main()函数之后耗时的影响因素
-
执行main()函数的耗时
-
执行applicationWillFinishLaunching的耗时
-
rootViewController及其childViewController的加载、view及其subviews的加载
推送通知
通知是内容驱动型应用的一个组成部分。
远程通知
-【普通离线(远程)push】:收到推送后(有文字有声音),点开通知,进入APP后,才执行-
- (void)application:(UIApplication *)didReceiveRemoteNotification:(NSDictionary fetchCompletionHandler:(void result))handler *)application *)userInfo (^)(UIBackgroundFetchResult
-【静默push】:收到推送(没有文字没有声音),不用点开通知,不用打开APP,就能执行
- (void)application:(UIApplication *)application)userInfo didReceiveRemoteNotification:(NSDictionary fetchCompletionHandler:(void (^)(UIBackgroundFetchResultresult))handler
- 用户完全感觉不到。
本地通知
10.0以前的方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
}
后台拉取
要想启用后台拉取需要:
- 在项目中设置开启功能
- 设置刷新间隔
- 实现应用的委托方法