空的for循环不耗性能,基本不耗时
#pragma mark - 耗时操作 - (void)longOperation { // 性能测试: double start = CACurrentMediaTime(); for (int i = 0; i < 1000000; i++) { //循环内没有任操作 } // 获取时间差值 NSLog(@"----:%f",CACurrentMediaTime() - start); }
打印结果:2017-06-19 18:57:25.465 01-模拟耗时操作[95446:4223426] —-:0.002655
操作内存的栈区不耗性能,基本不耗时,因为地址是连续的,寻址简单
#pragma mark - 耗时操作 - (void)longOperation { // 性能测试: double start = CACurrentMediaTime(); for (int i = 0; i < 1000000; i++) { //定义一个int类型 -- 该变量存放在内存的栈区 int abc = 10000000; } // 获取时间差值 NSLog(@"----:%f",CACurrentMediaTime() - start); }
打印结果:2017-06-19 19:00:02.243 01-模拟耗时操作[95474:4224838] —-:0.002460
操作内存的常量区不耗性能,相对不耗时,但是相对栈区要耗性能一些,内存控件只开辟一次
#pragma mark - 耗时操作 - (void)longOperation { // 性能测试: double start = CACurrentMediaTime(); for (int i = 0; i < 1000000; i++) { // 定义一个NSString字符串 -- 该变量存放在内存的常量区 NSString *str = @"aaaaaaaaaaaaaaaaaaaaaaaa"; } // 获取时间差值 NSLog(@"----:%f",CACurrentMediaTime() - start); }
打印结果:2017-06-19 19:03:57.907 01-模拟耗时操作[95515:4226915] —-:0.011038
操作内存的堆区,相对栈区和常量区要耗更多性能,因为堆区的地址是不连续的,需要耗费时间去寻址
#pragma mark - 耗时操作 - (void)longOperation { // 性能测试: double start = CACurrentMediaTime(); for (int i = 0; i < 1000000; i++) { // 该变量存放在内存的堆区 NSString *str = [NSString stringWithFormat:@"test--%d",i]; } // 获取时间差值 NSLog(@"----:%f",CACurrentMediaTime() - start); }
打印结果:2017-06-19 19:17:28.997 01-模拟耗时操作[95598:4233527] —-:0.804514
I/O操作是非常耗性能的
#pragma mark - 耗时操作 - (void)longOperation { // 性能测试: double start = CACurrentMediaTime(); for (int i = 0; i < 1000000; i++) { // 打印非常耗时也就是耗时操作 NSLog(@"%d",i); } // 获取时间差值 NSLog(@"----:%f",CACurrentMediaTime() - start); }
打印结果:2017-06-19 19:11:29.560 01-模拟耗时操作[95554:4229094] —-:176.182018
耗时操作对UI交互影响:会卡死UI导致屏幕上的空间暂时无法执行操作
不同内存区域的耗时操作
最新推荐文章于 2024-10-25 22:15:07 发布