¿Qué es un NSCFDiccionario?

Me devuelven un NSCFDictionary y no sé cómo usarlo. Sé que es del tipo NSCFDictionary porque imprimí la clase y salió como __NCSFDictionary. No puedo entender cómo hacer algo con eso.

Estoy tratando de mantenerlo por ahora, pero ni siquiera puedo hacer que funcione:

NSDictionary *dict = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials]; for(NSURLProtectionSpace key in [dict keyEnumerator]) { NSCFDictionary *value = [dict objectForKey:key]; } 

La referencia de clase para allCredentials dice que se supone que debe devolver un diccionario cuyos valores también son diccionarios. Sin embargo, mi statement de asignación no está funcionando. ¿Necesito un elenco de algún tipo?

NSDictionary y las otras clases de colección son realmente clústeres de clases : varias clases de subclases concretas enmascaradas bajo la interfaz de una sola clase: todas proporcionan la misma funcionalidad (porque son subclases de la misma clase; en el caso de NSDictionary, esto involucra a las tres “primitivas”). métodos “ -count , -objectForKey: y -keyEnumerator ), pero tienen diferentes -keyEnumerator internas para ser eficientes en diferentes situaciones, en función de cómo se crean y qué tipo de datos pueden estar almacenando.

NSCFDictionary es simplemente una subclase concreta de NSDictionary. Es decir, sus NSDictionaries en realidad pueden ser instancias de NSCFDictionary, pero debe tratarlos como instancias de NSDictionary, porque eso le proporcionará la funcionalidad de almacenamiento de diccionarios requerida.

  NSDictionary * value = [dict objectForKey: clave]; 

Ahora, otra razón por la que su código no funciona: NSURLProtectionSpace es una clase, por lo que debe usarlo como un puntero, como este:

 for (NSURLProtectionSpace *key ... 

NSCFDictionary es la subclase privada de NSDictionary que implementa la funcionalidad real. Es solo un NSDiccionario. Casi cualquier NSDictionary que utilice será un NSCFDiccionario bajo el capó. No le importa a tu código. Puede escribir la variable como NSDictionary y usarla en consecuencia.

Tengo un NSCFDiccionario que en realidad es un objeto NSMutableDictionary, puedo eliminar elementos de él. Menciono esto para aclarar aún más la respuesta de jtbandes: el objeto NSCFDictionary puede ser cualquier objeto que herede de NSDictionary.