我其实对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秒,这个在计算机里面可以说是天壤之别吧,值得我们思考。~