gpt4 book ai didi

objective-c - block 迭代 vs 快速枚举 vs for 循环

转载 作者:行者123 更新时间:2023-12-03 17:11:39 25 4
gpt4 key购买 nike

我认为迭代 block 比枚举更快,在某些情况下确实如此。然而,在这个简单的示例中,我有一个数据数组,并且使用不同的迭代方法创建多个数组,但结果并不是我所期望的。

解释一下会有帮助。

NSMutableArray *dataArray =[[[NSMutableArray alloc] init] autorelease];
NSMutableArray *mArray1 = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray *mArray2 = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray *mArray3 = [[[NSMutableArray alloc] init] autorelease];

NSDate *dt1 = [NSDate date];
for (int j=0; j<10000000;j++)
{
[dataArray addObject:[NSNumber numberWithInt:j]];
}

NSDate *dt2 = [NSDate date];
int cnt = [dataArray count];
//Using normal for loop
for (int k=0; k<cnt;k++)
{
[mArray1 addObject:[dataArray objectAtIndex:k]];
}

//Using Fast Enumeration
NSDate *dt3 = [NSDate date];
for (NSNumber *num in dataArray)
{
[mArray2 addObject:num];
}


//Enumerating using Blocks
NSDate *dt4 = [NSDate date];
[dataArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[mArray3 addObject:obj];
}];
NSDate *dt5 = [NSDate date];

NSLog(@"Time taken to create the data array %f",[dt2 timeIntervalSinceDate:dt1]);
NSLog(@"Time taken to iterate using normal for loop %f",[dt3 timeIntervalSinceDate:dt2]);
NSLog(@"Time taken to iterate using fast enumeration %f",[dt4 timeIntervalSinceDate:dt3]);
NSLog(@"Time taken to iterate using blocks %f",[dt5 timeIntervalSinceDate:dt4]);

//创建数据数组所花费的时间0.383750

//使用普通for循环进行迭代所花费的时间0.309719

//使用快速枚举进行迭代所花费的时间0.278467

//使用 block 进行迭代所花费的时间0.526629

最佳答案

有一个非常好的post by NSHipster ( @mattt ) 关于所有不同的枚举器。读一下它,它会解释所有的差异。

快速枚举速度更快,但是 block 枚举还有一个额外的好处,即拥有对象及其索引,这非常有用!

关于objective-c - block 迭代 vs 快速枚举 vs for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23227337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com