我正在尝试将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?
答案 0 :(得分:7)
NSCFArray
== NSArray
,它暴露了Foundation对象的"toll-free bridged"面。
您可以使用NSCFArray
使用NSArray
执行所有操作,反之亦然。您可以将NSArray
传递给CFArray
函数,也可以将CFArray
传递给NSArray
方法。
这是因为我们称为NSArray
或CFArray
的内部数据类型实际上是 a NSCFArray
。
这不适用于所有的Foundation对象,这里是Cocoa中所有免费桥接对象的列表: