target_results是一个NSMutableDictionary。这是将部分金额存储到列表中的有效方法吗?你能提出任何改进吗?
NSInteger temp_key = [rs intForColumn:@"some_int_field"];
NSInteger existing_value = [[target_results objectForKey:[NSNumber numberWithInteger:temp_key]] intValue];
if (existing_value > 0)
{
//add to existing
[target_results setObject:[NSNumber numberWithInteger:10+existing_value] forKey:[NSNumber numberWithInteger:temp_key]];
}
else
{
//new entry
[target_results setObject:[NSNumber numberWithInteger:10] forKey:[NSNumber numberWithInteger:temp_key]];
}
答案 0 :(得分:3)
最正确的优化方法是分析和查找实际瓶颈所在的位置(如果有)。那就是说,按照第一原则工作......
首先,不需要两次调用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
而不是字典,假设您可以进行初始化步骤。