dispatch_benchmark
使用 dispatch_benchmark() 函数可以测算代码执行时间。dispatch_benchmark() 并未公开,需要开发者自己声明。
extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));
- (void)viewDidLoad {
[super viewDidLoad];
size_t const objectCount = 1000;
// 10000 表示 block 要执行次数
// n 返回 block 执行一次的平均值
uint64_t n = dispatch_benchmark(10000, ^{
// 最好是将测试 block 手动放入自动释放池,因为 block 每次都会生成一些局部变量,测试次数又很大,如果不放入自动释放池,栈可能被撑爆。虽然 @autoreleasepool 会增加时间。
@autoreleasepool {
id obj = @42;
NSMutableArray *array = [NSMutableArray array];
for (size_t i = 0; i < objectCount; ++i) {
[array addObject:obj];
}
}
});
NSLog(@"-[NSMutableArray addObject:] : %llu ns", n);
}