Что такое NSCFDictionary? - PullRequest
       17

Что такое NSCFDictionary?

10 голосов
/ 23 августа 2011

Мне возвращают NSCFDictionary, и я не могу понять, как его использовать.Я знаю, что это тип NSCFDictionary, потому что я напечатал класс, и он вышел как __NCSFDictionary.Я не могу понять, как с этим что-то сделать.

Я просто сейчас пытаюсь удержать это, но даже не могу заставить это работать:ссылка на класс для allCredentials говорит, что она должна возвращать словарь, значения которого также являются словарями.Мое заявление о назначении не работает, хотя.Нужен ли мне какой-нибудь актерский состав?

Ответы [ 3 ]

25 голосов
/ 23 августа 2011

NSDictionary и другие классы коллекции на самом деле кластеры классов : несколько конкретных подклассов классов, маскирующихся под интерфейсом одного класса: все они предоставляют одинаковую функциональность (поскольку они являются подклассами одного и того же класса - в случае NSDictionary, это включает три "примитивных методов" -count, -objectForKey: и -keyEnumerator), ноиметь различную внутреннюю работу, чтобы быть эффективной в разных ситуациях, в зависимости от того, как они созданы и какого типа данные они могут хранить.

NSCFDictionary - это просто конкретный подкласс NSDictionary. То есть, ваши NSDictionaries на самом деле могут быть экземплярами NSCFDictionary, но вы должны рассматривать их как экземпляры NSDictionary, потому что это предоставит вам необходимые функции хранения словаря.

<b><i>NSDictionary</b></i> *value = [dict objectForKey:key];

Теперь еще одна причинакод не работает: NSURLProtectionSpace является классом, поэтому вы должны использовать его как указатель,как это:

for (NSURLProtectionSpace *key ...
4 голосов
/ 23 августа 2011

NSCFDictionary является частным подклассом NSDictionary, который реализует фактическую функциональность. Это просто NSDictionary. Практически любой используемый вами NSDictionary будет скрытым NSCFDictionary. Это не имеет значения для вашего кода. Вы можете ввести переменную как NSDictionary и использовать ее соответственно.

0 голосов
/ 13 июля 2014

У меня есть NSCFDictionary, который на самом деле является объектом NSMutableDictionary, я могу удалить элементы из него. Я упоминаю это, чтобы уточнить ответ jtbandes: объектом NSCFDictionary может быть любой объект, который наследуется от NSDictionary.

...