gpt4 book ai didi

objective-c - 优化这个 for 循环

转载 作者:行者123 更新时间:2023-12-03 17:08:07 24 4
gpt4 key购买 nike

我在仪器中运行时间分析器。我尽可能地简化了代码,将所有内容归结为确切的问题。循环内的代码行具有 checkInString =[_formatter stringFromDate:[checkInArrayCopy objectAtIndex:i]];正在占用 90% 以上的处理时间。关于如何优化此代码的任何想法?

 NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[format setDateFormat:@"MM/dd/YYYY"];
NSString *checkInString;
for (int x=0; x<100; x++) {
for (int i=0; i<checkInArray.count; i++) { //CheckInArray is a NSMutableArray of NSDates, with about 100 objects inside
checkInString =[_formatter stringFromDate:[checkInArray objectAtIndex:i]]; //**90% of processing time
}
}

最佳答案

老实说,我认为任何重大改进都将是算法更改,这超出了我们在这里实际建议的范围(例如,减少您需要执行的循环量,或消除获取所有日期字符串)。

您可以进行一些微优化,但我不认为它们会产生显着差异。基本上,您可以通过使用 IMP 缓存和 NSArray 的枚举方法而不是 C for 循环来减少消息发送的数量,这应该会带来小幅提升。

NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[format setDateFormat:@"MM/dd/YYYY"];
__block NSString *checkInString;
id (*stringFromDateIMP)(id, SEL, id) = [_formatter methodForSelector:@selector(stringFromDate:)];
for (int x=0; x<100; x++) {
[checkInArray enumerateObjectsUsingBlock:^(NSDate *date, NSUInteger i, BOOL *stop) { //CheckInArray is a NSMutableArray of NSDates, with about 100 objects inside
checkInString = stringFromDateIMP(_formatter, @selector(stringFromDate:), date);
}];
}

(在浏览器中编写,所以警告编译器。)

关于objective-c - 优化这个 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778985/

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