iOS界面跳转卡顿延迟的原因:
1.A页面跳到B页面,B页面加载大量数据,导致卡顿延迟;
2.A页面跳到B页面,B页面�创建大量UI,导致卡顿延迟;
3.A页面跳到B页面,A或B页面�GPU使用过高,导致动画不流畅卡顿延迟;
解决方法
1.大量数据加载问题
大量数据加载导致的问题,可以将数据加载放在子线程中进行,如:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"标题";
self.view.backgroundColor = [UIColor whiteColor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//发送网络请求1
//发送网络请求2
//发送网络请求3
});
dispatch_async(dispatch_get_main_queue(), ^{
//创建UI1
//创建UI2
//创建UI3
//创建UI4
});
}
2.创建大量UI问题
使用异步分发到主队列,等待转场动画完成后(即:RunLoop的下一次执行),如上:
3.GPU使用过高
A页面尽量避免使用过高占用GPU的方法,B页面将UI创建嵌套分发到主队列,如下图:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"标题";
self.view.backgroundColor = [UIColor whiteColor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//发送网络请求1
//发送网络请求2
//发送网络请求3
});
//分解cpu压力的方法,即每次RunLoop后面分发一个任务
dispatch_async(dispatch_get_main_queue(), ^{
//创建UI1
dispatch_async(dispatch_get_main_queue(), ^{
//创建UI2
dispatch_async(dispatch_get_main_queue(), ^{
//创建UI3
dispatch_async(dispatch_get_main_queue(), ^{
//创建UI4
});
});
});
});
}