我是靠谱客的博主 知性小海豚,最近开发中收集的这篇文章主要介绍使用for、forin和block遍历NSArray的效率的比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

代码:

#import <Foundation/Foundation.h>
extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));
void processNumber(NSNumber *n);
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建一个数组并用随机数填充
NSUInteger const capacity = 15;
NSMutableArray *array = [NSMutableArray arrayWithCapacity:capacity];
for (NSUInteger i = 0; i < capacity; ++i) {
[array addObject:@(arc4random_uniform(100))];
}
size_t count = 10000000;
// 使用for循环遍历数组
uint64_t time1 = dispatch_benchmark(count, ^{
for (NSUInteger i = 0; i < capacity; ++i) {
processNumber(array[i]);
}
});
NSLog(@"for = %lluns", time1);
// 使用forin循环遍历数组
uint64_t time2 = dispatch_benchmark(count, ^{
for (NSNumber *num in array) {
processNumber(num);
}
});
NSLog(@"forin = %lluns", time2);
// 使用block遍历数组
uint64_t time3 = dispatch_benchmark(count, ^{
[array enumerateObjectsUsingBlock:^(NSNumber *num, NSUInteger idx, BOOL *stop) {
processNumber(num);
}];
});
NSLog(@"block = %lluns", time3);
}
return 0;
}
void processNumber(NSNumber *n) {
// code...
}

输出:

for = 326ns
forin = 237ns
block = 638ns

但是如果把所有的processNumber函数注释掉,输出的结果如下:

for = 20ns
forin = 106ns
block = 496ns

所以对于遍历数组,不能武断的得出某种方式效率一定最高的结论,实际的执行效果往往取决于代码编写的情况。

转载于:https://www.cnblogs.com/xwoder/p/4468044.html

最后

以上就是知性小海豚为你收集整理的使用for、forin和block遍历NSArray的效率的比较的全部内容,希望文章能够帮你解决使用for、forin和block遍历NSArray的效率的比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部