转载请标明出处:blog.csdn.net/zhangxingping
类名称的用法
在代码中类名称的使用只有两种情况:作为一种数据类型和作为一个对象。● 类名称可以被用来作为类型名,标明对象的类型。例如:
Rectangle *anObject;
这里,anObject被静态地声明为是指向一个Rectangle类的对象的指针。编译器期望该对象应该有Rectangle类的实例该有的数据和方法,即那些在Rectangle类中定义以及继承而来的数据结构和实例方法。这种静态类型使得编译器在编译时能更好地进行类型检查,并且能使得代码具有自我注释性,更方便阅读。请参阅“使能静态行为”,获取更多关于这点的信息。
只有实例才可以使用这种静态类型;类对象则不能。这是因为类对象不是类的成员,而是Class类型的数据类型。
● 作为发送消息表达式中的接收者的时候,类名称代表的是类对象。这种使用方法在前面的是个示例程序中都有所演示。类名称只有在作为消息的接收者的时候才代表类对象。在其他情况下,我们必须通过发送class消息类获取对应的类对象。下面的示例程序把Rectangle类作为参数传递给isKindOfClass:消息:
if ( [anObject isKindOfClass:[Rectangle class]] )
...
只使用Rectangle作为参数,则是错误的。类名称只能作为消息的接收者。
如果在编译时我们不知道具体的类名称,但是在运行时能知道该类名的字符串形式,那么我们可以使用NSClassFromString来获取其对应的类对象:
NSString *className;
...
if ( [anObject isKindOfClass:NSClassFromString(className)] )
...
这个函数在传入的字符串不是有效的类名的时候返回nil。
类名称和函数名称一样是作为全局变量出现在同一个命名空间中的。类名称和全部变量不能有相同的名称。类名称在Objective-C中是唯一具有全局可见性的名称。