美文网首页
OC中指针运算效率(原创)

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

作者: xiangshun | 来源:发表于2017-01-19 16:44 被阅读0次

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

相关文章

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

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

  • iOS 判断NSString NSArray NSDiction

    nil:指向oc中 "对象" 的空指针Nil:指向oc中 "类" 的空指针NULL:指向 "其他类型" 的空指针,...

  • nil,Nil,NULL,NSNull

    nil: OC中对象为空,指向不存在的对象指针 Nil:OC中类为空,指向0的类指针 NULL:C指针为空,在指针...

  • __bridge的作用

    将OC指针与C语言中指针(或者void *)相互转换。 OC指针与void *不能直接相互转化,涉及到OC中对象的...

  • nil、Nil、NULL的区别

    nil:指向oc中对象的空指针,针对对象。 Nil:指向oc中类的空指针,针对类。 NULL:指向其他类型的空指针...

  • 各种nil,野指针,僵尸对象

    nil:OC中的对象的空指针 Nil:OC中类的空指针 NULL:C类型的空指针 NSNull:数值类的空对象 野...

  • 02-OC中对象的isa指针和superclass指针

    OC中的isa指针和superclass指针 OC中的对象分为哪一类 instance对象(实例对象) class...

  • swift的指针介绍,指针的常用函数和使用

    OC指针 在OC中的对象Object我们都是用的指针,像下面这些: 很显然在OC中我们使用*来表示对象,其实是声明...

  • nil Nil NULL NSNull

    nil:指向oc中对象的空指针(对象),nil是一个指向不存在对象的指针 Nil:指向oc中类的空指针 NULL:...

  • nil,Nil,NSNull,NULL区别

    定义 nil:指向oc中对象的空指针Nil:指向oc中类的空指针NULL:指向其他类型的空指针,如一个c类型的内存...

网友评论

      本文标题:OC中指针运算效率(原创)

      本文链接:https://www.haomeiwen.com/subject/ljpibttx.html