我其實(shí)對C跟Objective-C都不太了解卷哩,我知道OC是C的超集,那么C中很多語法跟邏輯按道理來說都可以在OC來寫桶错。
回到正題航唆,比如有這樣一個(gè)運(yùn)算場景,有一個(gè)數(shù)組院刁,里面有上億個(gè)數(shù)據(jù)糯钙,需要逐一對里面的數(shù)據(jù)進(jìn)行運(yùn)算,現(xiàn)在用常規(guī)邏輯來試試:
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));
運(yùn)行輸出:
===:4999999950000000.000000
===interval2-interval:3.026512
我電腦是13寸MAC退腥,CPU是2.9GHz intel core i5任岸,我運(yùn)行了幾次,結(jié)果都是在3秒左右狡刘。
然后我們換成指針運(yùn)算的方式:
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
也是運(yùn)行了好幾次享潜,都是在1.1秒左右。
想想看嗅蔬,3秒跟1秒剑按,這個(gè)在計(jì)算機(jī)里面可以說是天壤之別吧,值得我們思考澜术。~