好的,所以我理解一个对象是一个必须分配和初始化的类的实例,但类本身是对象吗?
我知道当你创建一个新类时,它是其他东西的实例,比如NSObject。所以,如果这使它成为一个类,那么对象不仅可以容纳变量和方法,还可以容纳其他对象,对吧?
对不起,这可能是非常基本的,但是我正在读两本关于cocoa和xcode的书,这一点有点不清楚(可能是因为我缺乏其他语言的经验)。
答案 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的