iOS界面跳轉(zhuǎn)卡頓延遲的原因:
1.A頁面跳到B頁面关筒,B頁面加載大量數(shù)據(jù),導(dǎo)致卡頓延遲驶睦;
2.A頁面跳到B頁面砰左,B頁面?創(chuàng)建大量UI,導(dǎo)致卡頓延遲场航;
3.A頁面跳到B頁面缠导,A或B頁面?GPU使用過高,導(dǎo)致動(dòng)畫不流暢卡頓延遲溉痢;
解決方法
1.大量數(shù)據(jù)加載問題
大量數(shù)據(jù)加載導(dǎo)致的問題僻造,可以將數(shù)據(jù)加載放在子線程中進(jìn)行憋他,如:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"標(biāo)題";
self.view.backgroundColor = [UIColor whiteColor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//發(fā)送網(wǎng)絡(luò)請(qǐng)求1
//發(fā)送網(wǎng)絡(luò)請(qǐng)求2
//發(fā)送網(wǎng)絡(luò)請(qǐng)求3
});
dispatch_async(dispatch_get_main_queue(), ^{
//創(chuàng)建UI1
//創(chuàng)建UI2
//創(chuàng)建UI3
//創(chuàng)建UI4
});
}
2.創(chuàng)建大量UI問題
使用異步分發(fā)到主隊(duì)列,等待轉(zhuǎn)場動(dòng)畫完成后(即:RunLoop的下一次執(zhí)行)髓削,如上:
3.GPU使用過高
A頁面盡量避免使用過高占用GPU的方法竹挡,B頁面將UI創(chuàng)建嵌套分發(fā)到主隊(duì)列,如下圖:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"標(biāo)題";
self.view.backgroundColor = [UIColor whiteColor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//發(fā)送網(wǎng)絡(luò)請(qǐng)求1
//發(fā)送網(wǎng)絡(luò)請(qǐng)求2
//發(fā)送網(wǎng)絡(luò)請(qǐng)求3
});
//分解cpu壓力的方法立膛,即每次RunLoop后面分發(fā)一個(gè)任務(wù)
dispatch_async(dispatch_get_main_queue(), ^{
//創(chuàng)建UI1
dispatch_async(dispatch_get_main_queue(), ^{
//創(chuàng)建UI2
dispatch_async(dispatch_get_main_queue(), ^{
//創(chuàng)建UI3
dispatch_async(dispatch_get_main_queue(), ^{
//創(chuàng)建UI4
});
});
});
});
}
以上方法是優(yōu)化結(jié)論揪罕,可以直接使用,想知道優(yōu)化原理見下面三篇文章
頁面跳轉(zhuǎn)性能優(yōu)化一
頁面跳轉(zhuǎn)優(yōu)化性能二
屏幕成像原理