Objective-C中的类对象是什么?

时间:2011-04-24 20:30:54

标签: objective-c macos cocoa class metaclass

好的,所以我理解一个对象是一个必须分配和初始化的类的实例,但类本身是对象吗?

我知道当你创建一个新类时,它是其他东西的实例,比如NSObject。所以,如果这使它成为一个类,那么对象不仅可以容纳变量和方法,还可以容纳其他对象,对吧?

对不起,这可能是非常基本的,但是我正在读两本关于cocoa和xcode的书,这一点有点不清楚(可能是因为我缺乏其他语言的经验)。

1 个答案:

答案 0 :(得分:34)

Here对Greg Parker的问题有很好的解释

引用:

  

[...]每个Objective-C类也是一个   宾语。它有一个isa指针和   其他数据,并可以响应   选择。当你打电话给“班级   方法“喜欢[NSObject alloc],你是   实际上发送一条消息   类对象。

     

由于类是一个对象,它必须是   一些其他类的实例:a   元类。元类就是   只是对类对象的描述   喜欢这个类是描述   普通的例子。特别是   metaclass的方法列表是类   方法:该类的选择器   对象响应。当你发送一个   消息给一个类 - 一个实例   metaclass - objc_msgSend()看起来   通过方法列表   元类(及其超类,如果   任何)决定调用什么方法。   类方法由。描述   代表类的元类   对象,就像实例方法一样   由班级代表描述   实例对象。

     

元类怎么样?是吗   元类一路下来?没有   metaclass是root的一个实例   班级的元类;根元类   本身就是root的一个实例   元类。 isa链以a结尾   循环在这里:实例到类到   元类将根元类转换为自身。   元类的行为是一个指针   很少,因为在真实中   世界没有人发送消息   元类对象。 [...]

进一步有趣的读物:

Colin Wheeler的

Understanding the Objective-C Runtime (搜索标题为“So Classes define objects ...”的段落)

Matt Gallagher的

What is a meta-class in Objective-C?