Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSString instance reports its class as NSCFString

My objective here is really simple -- I'm trying to set an NSString to some test data, then return the class, which should be NSString. Here's my code:

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

The log says that the class is NSCFString, not NSString. What's going on here?

like image 222
bloudermilk Avatar asked Dec 26 '08 15:12

bloudermilk


2 Answers

NSString is really a container class for different types of string objects. Generally an NSString constructor does return an object that is actually of type NSCFString, which is a thin wrapper around the Core Foundation CFString struct.

like image 193
mipadi Avatar answered Sep 25 '22 11:09

mipadi


NSString is a class cluster, along with other Foundation types such as NSNumber and NSArray:

Class clusters are a design pattern that the Foundation framework makes extensive use of. Class clusters group a number of private, concrete subclasses under a public, abstract superclass. The grouping of classes in this way simplifies the publicly visible architecture of an object-oriented framework without reducing its functional richness. Class clusters are based on the Abstract Factory design pattern discussed in “Cocoa Design Patterns.”

like image 43
Marc Charbonneau Avatar answered Sep 26 '22 11:09

Marc Charbonneau