在我正在处理的程序中,我使用了一个 C 字符数组(它可能是一个非常大的数组,所以我不想使用 NSArray)。每个都存储一个对应于特定状态的值。
为了可以存储有关每个状态的一些信息,我使用的是 NSDictionary。每个键对应于可能的状态值。对于每个键,值是一个子字典,其中包含我需要与状态值相对应的信息。
目前,每当我想从 NSDictionary 中提取信息时,我都会执行以下操作:
for(i=0; i<arrayLen; i++) {
NSString *lookupKey1 = [[NSString alloc]initWithFormat:@"%i", array[i]];
int stateInfo1 = [[[statesDict objectForKey:lookupKey1]
objectForKey:@"infoKey1"] intValue];
[lookupKey1 release];
NSString *lookupKey2 = [[NSString alloc]initWithFormat:@"%i", array[i]];
int stateInfo2 = [[[statesDict objectForKey:lookupKey2]
objectForKey:@"infoKey2"] intValue];
[lookupKey2 release];
// Now do something with the values just obtained...
}
这工作得很好,但我不喜欢这样做是我必须分配一个 NSString,只是为了查找一个键。感觉就像我在执行不必要的操作。这对我来说是一个特别关心的问题,因为我正在遍历一个大数组,除非我绝对必须这样做,否则我不想通过这种方式减慢它的速度。
当我尝试像最初希望的那样简单地传递字符时:
char stateInfo = [[[statesDict objectForKey:array[i]]
objectForKey:@"infoKey"] charValue];
编译器给出警告“传递 objectForKey 的参数 1:从不强制转换的整数中生成指针”,并且调试器抛出 EXC_BAD_ACCESS 异常。
我也尝试过传入格式化的字符串文字:
char stateInfo = [[[statesDict objectForKey:(@"%i", array[i])]
objectForKey:@"infoKey"] charValue];
这会引发完全相同的错误。有谁知道是否有更有效的方法来做我想做的事情,或者我在第一个片段中描述的方式是我想做的事情的“正确”方式?