Самый правильный способ оптимизации - это профилировать и находить фактические узкие места, если таковые имеются.Тем не менее, работая из первых принципов ...
Во-первых, нет необходимости вызывать NSNumber
дважды (три раза в коде, дважды во время выполнения).Каждый вызов создает новый объект, поэтому для этого требуется дополнительная память.Таким образом, это сокращение до:
NSInteger temp_key_int = [rs intForColumn:@"some_int_field"];
NSNumber *temp_key = [NSNumber numberWithInteger:temp_key_int];
NSInteger existing_value = [[target_results objectForKey:temp_key] intValue];
if (existing_value > 0)
{
//add to existing
[target_results setObject:[NSNumber numberWithInteger:10+existing_value] forKey:temp_key];
}
else
{
//new entry
[target_results setObject:[NSNumber numberWithInteger:10] forKey:temp_key];
}
Оператор if также, похоже, ничего не добивается.Таким образом, вы можете дополнительно уменьшить код до:
NSInteger temp_key_int = [rs intForColumn:@"some_int_field"];
NSNumber *temp_key = [NSNumber numberWithInteger:temp_key_int];
// will create a new entry or replace an existing entry, as per the normal behaviour
// of NSMutableDictionary
NSInteger existing_value = [[target_results objectForKey:temp_key] intValue];
[target_results setObject:[NSNumber numberWithInteger:10+existing_value] forKey:temp_key];
Я серьезно сомневаюсь, что вы увидите какие-либо проблемы с производительностью с этим или с оригинальным кодом.Однако вы описываете свою структуру данных как список, поэтому вы можете рассмотреть возможность использования NSMutableArray
вместо словаря, предполагая, что вы можете поместить шаг инициализации.