Objective-C 计算代码运行时间

来源:互联网 发布:筒灯什么牌子好 知乎 编辑:程序博客网 时间:2024/05/23 02:09

今天看到一篇关于iOS应用性能优化的文章,其中提到计算代码的运行时间,觉得非常有用,值得收藏。不过在模拟器和真机上是有差异的,以此方法观察程序运行状态,提高效率。

第一种:(最简单的NSDate)

NSDate* tmpStartData = [NSDate date];//You code here...double deltaTime = [[NSDate date] timeIntervalSinceDate:tmpStartData];NSLog(@"cost time = %f", deltaTime);

第二种:(将运行代码放入下面的Block中,返回时间)

#import <mach/mach_time.h>  // for mach_absolute_time() and friends    CGFloat BNRTimeBlock (void (^block)(void)) {      mach_timebase_info_data_t info;      if (mach_timebase_info(&info) != KERN_SUCCESS) return -1.0;        uint64_t start = mach_absolute_time ();      block ();      uint64_t end = mach_absolute_time ();      uint64_t elapsed = end - start;        uint64_t nanos = elapsed * info.numer / info.denom;      return (CGFloat)nanos / NSEC_PER_SEC;  }

第三种:

/** * 计算脚本时间 * @param $last 最后一次的运行clock * @param $key  标识 * @return 当前clock */double t(double last, char* key){    clock_t now = clock();    printf("time:%fs \t key:%s \n", (last != 0) ? (double)(now - last) / CLOCKS_PER_SEC : 0, key);    return now;}double t1 = t(0, "");//do somethingt(t1, "end");

飘飘白云文中说到,对于UIImage载入图像的方法,下面第一种更为高效,因为iOS会自带 cache 载入图像。

+ (UIImage *)imageNamed:(NSString *)name;- (id)initWithContentsOfFile:(NSString *)path;

但是,imageNamed方法只能载入bundle中的文件,如网络图像解析就无能为力了。

正好这里总结到计算代码运行时间,就以此为例看看两种方法到底谁更高效,这里我用最简单的NSDate计算耗时:

    for (int i=0 ; i<10000; i++) {        UIImage *image = [UIImage imageNamed:@"icon.png"];//        UIImage *image = [[UIImage alloc] initWithContentsOfFile:@"icon.png"];        image = nil;    }    double deltaTime = [[NSDate date] timeIntervalSinceDate:tmpStartData];    NSLog(@"cost time = %f", deltaTime);

输出结果:

cost time = 0.022821 //imageNamedcost time = 0.102620 //initWithContentsOfFile

这里图片我用的一张1024x1024像素的png,可见两种加载图像的方法耗时差别还是挺大的。
部分引用自:

  • 飘飘白云 - [深入浅出Cocoa]iOS程序性能优化
  • c小淡 - php ,objective-c 计算脚本运行时间
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑没有家庭组怎么办 usb共享网络出错怎么办 电脑共享有密码怎么办 win10连不上网怎么办 w10网络重置了怎么办 点击网络重置后怎么办? 电脑启动找不到硬盘怎么办 电脑开机找不到硬盘怎么办 电脑找不到宽带连接怎么办 电脑文件找不到了怎么办 电脑找不到手机热点怎么办 win7电脑没有网络适配器怎么办 手机计算机桌面找不到怎么办 手机忘记开锁密码怎么办 电脑没网感叹号怎么办 本地连接2没有了怎么办 电脑上找不到本地连接怎么办 网络无访问权限怎么办 电脑无网络访问怎么办 xp连不上网怎么办 xp系统本地连接不见了怎么办 电脑xp系统本地连接怎么办 xp系统本地连接失败怎么办 xp系统找不到本地连接怎么办 台式电脑连不上网络怎么办 win7局域网要密码怎么办 xp网络不能上网怎么办 台式电脑连宽带怎么办 win7宽带813错误怎么办 电脑不显示本地连接怎么办 w7宽带连接不了怎么办 网络接收器坏了怎么办 电脑网页打开慢怎么办 win10无法添加打印机怎么办 2018杭州禁摩怎么办 中山个人怎么办社保卡 昆山房产证丢了怎么办 于一机交宽带费怎么办 租房子的怎么办宽带 乐才注册不了怎么办 分期乐登录不了怎么办