OC中指针运算效率(原创)

我其实对C跟Objective-C都不太了解,我知道OC是C的超集,那么C中很多语法跟逻辑按道理来说都可以在OC来写。

回到正题,比如有这样一个运算场景,有一个数组,里面有上亿个数据,需要逐一对里面的数据进行运算,现在用常规逻辑来试试:

NSMutableArray *ary=[NSMutableArray new];
NSInteger len=100000000;
for (int i=0; i<=len; i++) {
    [ary addObject:@(i)];
}
NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
double total=0;
for (int n=0; n<len; n++) {
    total+=[ary[n] intValue];
}
NSLog(@"===:%f",total);
NSTimeInterval interval2 = [[NSDate date] timeIntervalSince1970];
NSLog(@"===interval2-interval:%f",(interval2-interval));

运行输出:

 ===:4999999950000000.000000
 ===interval2-interval:3.026512

我电脑是13寸MAC,CPU是2.9GHz intel core i5,我运行了几次,结果都是在3秒左右。

然后我们换成指针运算的方式:

NSMutableArray *ary=[NSMutableArray new];
NSInteger len=100000000;
for (int i=0; i<=len; i++) {
    [ary addObject:@(i)];
}
NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
double total=0;
void *pe=(__bridge void*)nm;
for (int n=0; n<len; n++) {
    total=total+[(__bridge_transfer id)pe intValue];
    pe+=16;
}
NSLog(@"===:%f",total);
NSTimeInterval interval2 = [[NSDate date] timeIntervalSince1970];
NSLog(@"===interval2-interval:%f",(interval2-interval));

输出:

 ===:4999999950000000.000000
 ===interval2-interval:1.125193

也是运行了好几次,都是在1.1秒左右。

想想看,3秒跟1秒,这个在计算机里面可以说是天壤之别吧,值得我们思考。~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2、#import和#include的区别是什么?#import<> 跟 #import""有什么区别? .#im...
    AlanGe阅读 330评论 0 0
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,753评论 0 4
  • 很多时候,人们对“浮躁”这个词太熟悉,熟悉到不去关注它到底是什么意思。我特意查了一下释义,“躁”的意思是:心里有众...
    三城一郭阅读 1,569评论 0 4
  • 文/无忧先生 在夜里哭泣,原因没有你 我不想逃避,背叛我心忘记你 他俩多开心,他俩多欢愉 为何我活着会有这么多思绪...
    无忧先生阅读 314评论 0 0
  • 在前篇重组/分解动画完成后,我想到了一个最佳使用场景:CollectionView 添加和删除项目时的动画。效果如...
    seedante阅读 12,126评论 4 38