2008-12-26 57 views
20

我在这里的目标非常简单 - 我试图设置一个NSString到一些测试数据,然后返回类,这应该是NSString。这里是我的代码:NSString实例报告它的类为NSCFString

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

日志说,类NSCFString,不NSString。这里发生了什么?

回答

30

NSString实际上是一个不同类型的字符串对象的容器类。通常,一个NSString构造函数确实是返回一个实际上类型为NSCFString的对象,它是Core Foundation CFString结构的一个薄包装器。

25

的NSString是class cluster,与其他类型的基础如NSNumber的和的NSArray沿着:

类簇是一个设计图案 ,基金会框架使得 广泛使用。类群集团 一些私人的,具体的 子类公共,抽象 超类。通过这种方式对 中的类进行分组,简化了面向对象框架的公开的 可见体系结构,而不减少其功能丰富性。 类集群是基于中讨论的 抽象工厂设计模式 “可可设计模式。”

+0

为什么苹果没有采用这种做法的NSOrderedSet? NSOrderedSet的行为与接口级别的NSArray完全相同,但他们为它创建了一个独立的类。 – Robert 2012-07-09 13:48:11