2008-12-26 6 views
20

Mein Ziel ist hier wirklich einfach - ich versuche, ein NSString auf einige Testdaten setzen, dann geben Sie die Klasse, die NSString sein sollte. Hier ist mein Code:NSString-Instanz meldet seine Klasse als NSCFString

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

Das Protokoll sagt, dass die Klasse NSCFString ist, nicht NSString. Was ist denn hier los?

Antwort

30

NSString ist wirklich eine Container-Klasse für verschiedene Arten von String-Objekten. Im Allgemeinen gibt ein NSString-Konstruktor ein Objekt zurück, das tatsächlich vom Typ NSCFString ist, der ein dünner Wrapper um die CFString-Struktur von Core Foundation ist.

25

NSString ist ein class cluster, zusammen mit anderen Foundation-Typen wie NSNumber und NSArray:

Klasse Cluster ein Entwurfsmuster sind , dass die Stiftung Rahmen umfangreiche Verwendung von macht. Klasse Cluster-Gruppe eine Reihe von privaten, Beton Unterklassen unter einer öffentlichen, abstrakten Oberklasse. Die Gruppierung von Klassen in auf diese Weise vereinfacht die öffentliche sichtbare Architektur eines objektorientierten Frameworks ohne , was die Funktionsvielfalt reduziert. Klasse Cluster basiert auf dem Abstract Factory-Entwurfsmuster in diskutiert „Cocoa Design Patterns.“

+0

Warum hat Apple-folgt nicht diesem Ansatz für NSOrderedSet? Ein NSOrderedSet verhält sich auf der Schnittstellenebene genau wie ein NSArray, hat dafür jedoch eine unabhängige Klasse erstellt. – Robert