iOS备忘录iOS bug修复iOS优化

【iOS】界面跳转性能优化

2016-07-06  本文已影响2217人  24c41111e47b

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
          });
        });
      });
    });
}

以上方法是优化结论,可以直接使用,想知道优化原理见下面三篇文章
页面跳转性能优化一
页面跳转优化性能二
屏幕成像原理

上一篇 下一篇

猜你喜欢

热点阅读