Одна вещь, которая ускорит этот код (за счет некоторого использования памяти), - это извлечь все потенциальные совпадения из вашего хранилища данных в набор или массив и запрос, который устанавливает, объект с вашим целевым идентификатором находится в нем. Запросы на выборку в базовых данных намного медленнее, чем эквивалентный запрос для набора объектов.
- (NSManagedObject *)feedItemWithId:(NSString *)itemId {
NSArray *fetchedObjects; // Assume this has already been generated
NSUInteger i = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
if ([idx id] = itemID)
return YES;
else
return NO;
}];
if (i != NSNotFound)
return [array objectAtIndex:i];
else
return nil;
}
Этот код был написан на месте, поэтому он может работать не так, как написано. Также, конечно, есть умные способы ускорить это, но, как показано, он должен работать значительно быстрее, чем отдельные запросы на выборку.