У меня работает профилировщик времени в инструментах. Я упростил код настолько, насколько могу, чтобы сварить все до точной проблемы. Строка кода внутри цикла, которая имеет 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
}
}
Возможно, вам не удастся оптимизировать формат даты (если таковой имеется), вы можете немного смягчить его, уменьшив количество циклов при работе с отдельным набором дат в 'NSSet' в зависимости от того, будет ли вы не работаете с минутами/секундами/миллисекундами. Итак, если вы можете подавить эти даты до половины, то это гораздо меньше, чем вы должны отформатировать. – Jeremy
Я думаю, вы могли бы использовать GCD для создания многопоточной версии кода - код кажется хорошо подходящим для многопоточности. Это _might_ увеличивает производительность на некоторых платформах. –
Предполагая, что они отсортированы и что вы нажимаете одну и ту же дату повторно, кеширование самой последней форматированной даты может сильно ускорить работу. – escrafford