NSArray превратился в NSCFArray при вставке в словарь - PullRequest
1 голос
/ 08 декабря 2010

Я пытаюсь сохранить 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 для вызова таких методов, как «count», которых нет у NSFCArray. Если я не могу сохранить значения в словаре как NSArray, как я могу преобразовать в NSArray из NSFCArray?

1 Ответ

7 голосов
/ 08 декабря 2010

NSCFArray == NSArray, он открывает " бесплатную мостовую " объекты Foundation.

Вы можете делать все с помощьюNSCFArray как вы можете с NSArray, и наоборот.Вы можете передать NSArray функции CFArray и CFArray методу NSArray.

Это связано с тем, что внутренний тип данных известен нам как NSArray илиCFArray is на самом деле a NSCFArray.

Это относится не ко всем объектам Foundation, вот список всех бесплатных мостовых объектов в Какао:

alt text

...