Objective C中的类对象

时间:2009-12-18 13:37:32

标签: java objective-c

我是从Java到Objective C,而类对象的想法让我想知道与Java的相似之处。来自Apple文档中的Objective C指南:

  

类定义的信息被编译并记录在可用于运行时系统的数据结构中。编译器只创建一个对象,一个类对象来表示该类。

所以我的理解是为程序使用的所有类创建了类对象,并且类对象是用于为该类创建对象的类。

为了比较,JVM是否为它加载的所有类都有类似的对象?

3 个答案:

答案 0 :(得分:9)

鉴于Java直接来自Objective-C(不,真的,它是),两者的运行时模型非常相似。

在Java中,“类”的概念并不像Objective-C那样通用。

在Objective-C中,Class是所谓的元类的实例。对于所有意图和目的,Objective-C中的每个Class对象完全按照您的说法执行;它描述了Objective-C运行时中可用的特定类。

Java类在概念上也是如此。有一个关键的区别。在Objective-C中,类方法是跨子类继承的,而更显着子类可以覆盖超类的类方法。

例如,NSArray类实现+array类方法('+'表示“类方法”)。 NSMutableArray的{​​{1}}子类重写NSArray以返回可变实例。

+array更类似于Objective-C运行时API;它是一种机制,通过它您可以自省运行时可用的类。由于Java没有功能API,因此API将包含在适当命名的类中。 java.lang.Class有点像运行时API和元类。

答案 1 :(得分:4)

Java中的可比结构是java.lang.Class

答案 2 :(得分:1)

我认为每个班级都有一个班级对象 该类对象是在低级别用于class_getName()class_getSuperclass()class_getVersion()class_respondsToSelector()的函数的对象。如果所有类都有一个类对象,那么这些函数将为所有类返回相同的结果。