每當執行程式時,左下角的FPS就低到了10,使app很卡,
原來程式主要卡的部分
-(void)draw{ NSDate *startTime = [NSDate date]; [self func]; //func為呼叫的函式 NSLog(@"time:%f",-[startTime timeIntervalSinceNow]); }
結果顯示的時間遠遠超過了1.0/60,(1.0/60為AppDelegate.m中的[director_setAnimationInterval:1.0/60] 設定的FPS)
由於[self func]比較耗時超過了1.0/60,故考慮將函式func分解成幾個函式,如func0,func1,func2等,同時增加了一個變數excPart = 0(用於決定執行哪個函式)
和幾個儲存func0,func1,func2相關資訊的成員變數,將函式func儘可能的分解,使其每個函式的執行時間在1.0/60左右
-(void)draw{ NSDate *startTime = [NSDate date]; switch(excPart){ case 0: [self func0]; excPart++; NSLog(@"time0:%f",-[startTime timeIntervalSinceNow]); break; case 1: [self func1]; excPart++; NSLog(@"time1:%f",-[startTime timeIntervalSinceNow]); break; case 2: [self func2]; excPart = 0; NSLog(@"time2:%f",-[startTime timeIntervalSinceNow]); break; defalut: break; } }
使time0,time1,time2儘可能在1.0/60左右,可以藉助增加成員變數的來分解函式
如果想使func只執行一次,可以增加成員變數Bool isExc = false
-(void)draw{ if (isExc == true){ NSDate *startTime = [NSDate date]; switch(excPart){ case 0: [self func0]; excPart++; NSLog(@"time0:%f",-[startTime timeIntervalSinceNow]); break; case 1: [self func1]; excPart++; NSLog(@"time1:%f",-[startTime timeIntervalSinceNow]); break; case 2: [self func2]; excPart = 0; isExc = false; //結束執行 NSLog(@"time2:%f",-[startTime timeIntervalSinceNow]); break; defalut: break; } } }
解決此問題主要關注FPS和draw函式所消耗時間的關係