2008-12-26 18 views
20

Mi objetivo aquí es realmente simple - Estoy tratando de establecer un NSString a algunos datos de prueba, luego devuelva la clase, que debe ser NSString. Aquí está mi código:instancia NSString informa su clase como NSCFString

NSString* stringer = [NSString stringWithFormat: @"Test"]; 
NSLog(@"%@", [stringer class]); 

El registro dice que la clase es NSCFString, no NSString. ¿Que está pasando aqui?

Respuesta

30

NSString es realmente una clase de contenedor para diferentes tipos de objetos de cadena. En general, un constructor NSString hace devuelve un objeto que es realmente del tipo NSCFString, que es un envoltorio delgado alrededor de la estructura CFString de Core Foundation.

25

NSString es un class cluster, junto con otros tipos Fundación como NSNumber y NSArray:

grupos de clase son un patrón de diseño que el marco de la Fundación hace un amplio uso de . Grupo de clusters de clase una serie de subclases privadas, concretas bajo una superclase pública, abstracta . La agrupación de clases en de esta manera simplifica públicamente la arquitectura visible de un marco orientado a objetos sin reduciendo su riqueza funcional. grupos de clase se basan en el patrón Abstract Factory diseño discutido en “Patrones de Diseño de cacao.”

+0

¿Por qué Apple no siguen este enfoque para NSOrderedSet? Un NSOrderedSet se comporta exactamente como un NSArray en el nivel de interfaz, sin embargo, hicieron una clase independiente para él. – Robert

Cuestiones relacionadas