每当运行程序时,左下角的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函数所消耗时间的关系