一、說明
Time Profiler
幫助我們分析代碼的執(zhí)行時(shí)間,找出導(dǎo)致程序變慢的原因,告訴我們“時(shí)間都去哪兒了?”
原始性能分析方法:寫個(gè)單元測試
NSDate *startDate = [NSDate date];
for (int i = 0; i < 100000; i++) {
NSString *string = @"123";
string = [string stringByAppendingString:@"abc"];
NSLog(@"%@", string);
}
NSDate *endDate = [NSDate date];
NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
NSLog(@"time = %f",interval);
這種方法的缺點(diǎn)有以下幾點(diǎn):
- 1败去、測試效率太低,很多性能瓶頸是很難預(yù)估到的烈拒,需要從上層到下層進(jìn)行逐步排除圆裕;
- 2、無法對界面渲染的效率進(jìn)行測試荆几,找出界面性能瓶頸吓妆;
- 3、NSLog的分析不夠精確吨铸,可能在模擬器上由于開發(fā)設(shè)備性能速度快行拢,無法明顯區(qū)分出性能瓶頸。
二诞吱、打開Instruments Time Profiler
盡量使用真機(jī)
調(diào)試舟奠,并且使用release
配置,這樣比較準(zhǔn)確點(diǎn)房维。
雙擊耗時(shí)比較多的函數(shù)調(diào)用
及時(shí)釋放占用內(nèi)存大的臨時(shí)變量沼瘫,減少內(nèi)存占用峰值。
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"首頁";
NSDate *startDate = [NSDate date];
for (int i = 0; i < 100000; i++) {
@autoreleasepool {
NSString *string = @"123";
string = [string stringByAppendingString:@"abc"];
// NSLog(@"%@", string);
}
}
NSDate *endDate = [NSDate date];
NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
NSLog(@"time = %f",interval);
}
注釋掉打印咙俩,重新跑一遍工程耿戚,很明顯流程多了