插入字典后,NSArray变成了NSCFArray

时间:2010-12-07 23:41:00

标签: objective-c nsarray nsdictionary nsmutabledictionary

我正在尝试将NSArray保存为NSMutableDictionary中的值。当我尝试获取我添加的内容时,它返回NSFCArray而不是NSArray:

NSArray * list = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] init];
for (NSString *name in list) {
    // first attempt
    [dictionary setObject:[NSMutableArray arrayWithObject:@"test"] forKey:name];
    NSLog(@"first attempt class: %@", [[dictionary valueForKey:name] class]);
    // second attempt
    NSArray * realArray = [[NSArray alloc] initWithArray:[dictionary valueForKey:name]];
    NSLog(@"second attempt class: %@", [realArray class]);
}

我认为这是为了提高效率。但是,我需要将我的值作为NSArray返回,以调用NSFCArray没有的“count”方法。如果我不能将值存储在字典中作为NSArray,我如何从NSFCArray转换为NSArray?

1 个答案:

答案 0 :(得分:7)

NSCFArray == NSArray,它暴露了Foundation对象的"toll-free bridged"面。

您可以使用NSCFArray使用NSArray执行所有操作,反之亦然。您可以将NSArray传递给CFArray函数,也可以将CFArray传递给NSArray方法。

这是因为我们称为NSArrayCFArray的内部数据类型实际上是 a NSCFArray

这不适用于所有的Foundation对象,这里是Cocoa中所有免费桥接对象的列表:

alt text