Objective-C 计算代码运行时间
2015-10-10 11:51
337 查看
今天看到一篇关于iOS应用性能优化的文章,其中提到计算代码的运行时间,觉得非常有用,值得收藏。不过在模拟器和真机上是有差异的,以此方法观察程序运行状态,提高效率。
飘飘白云文中说到,对于UIImage载入图像的方法,下面第一种更为高效,因为iOS会自带 cache 载入图像。
但是,imageNamed方法只能载入bundle中的文件,如网络图像解析就无能为力了。
正好这里总结到计算代码运行时间,就以此为例看看两种方法到底谁更高效,这里我用最简单的NSDate计算耗时:
输出结果:
这里图片我用的一张1024x1024像素的png,可见两种加载图像的方法耗时差别还是挺大的。
部分引用自:
飘飘白云 - [深入浅出Cocoa]iOS程序性能优化
c小淡 - php ,objective-c 计算脚本运行时间
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
第一种:(最简单的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 something t(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 //imageNamed cost time = 0.102620 //initWithContentsOfFile
这里图片我用的一张1024x1024像素的png,可见两种加载图像的方法耗时差别还是挺大的。
部分引用自:
飘飘白云 - [深入浅出Cocoa]iOS程序性能优化
c小淡 - php ,objective-c 计算脚本运行时间
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
相关文章推荐
- linq to object
- NSdata 与 NSString,Byte数组,UIImage 的相互转换—ios开发 Objective-C
- IOS加强知识(1)理解力Objective-C
- a different object with the same identifier value was already associated with the session
- Object-c父类子类
- Object-c 对象的使用和定义
- Object-C总结
- Python中用json.loads解码字符串出错:ValueError: No JSON object could be decoded
- 【Objective-C学习笔记】变量和基本的数据类型
- [Objective-c]_[NSUserDefaults]_[基本使用]
- 黑马程序员-----------Objective-C基础-----------OC基础
- C#中object missing = Type.Missing是什么意思
- shared libraries: libgtest.so.0: cannot open shared object fi
- Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference
- [Objective-c]_[块语法的使用及应用场景]
- iOS开发之Objective-C与JavaScript的交互
- 理解 Objective-C Runtime
- 【FAQ】Gerrit上打开的单子无法打开,点击提示“MissingobjectException:Missing unknown xxxx”
- objc_getAssociatedObject 出现异常
- iOS开发-基础:Object-C 中self. 与 下划线的区别