【问题标题】:Are classes objects in Objective-C?Objective-C 中的类是对象吗?
【发布时间】:2011-08-11 23:56:23
【问题描述】:
好的,所以我知道对象是必须分配和初始化的类的实例,但类本身是对象吗?
我知道当你创建一个新类时,它是其他东西的实例,比如 NSObject。所以,如果这使它成为一个类,那么对象不仅可以包含变量和方法,还可以包含其他对象,对吧?
对不起,这可能真的很基础,但我正在阅读两本关于可可和 xcode 的书,这一点有点不清楚(可能是因为我缺乏其他语言的经验)。
【问题讨论】:
标签:
objective-c
macos
cocoa
class
metaclass
【解决方案1】:
Here 是 Greg Parker 对此事的一个很好的解释
引用:
[...] 每个 Objective-C 类也是一个
目的。它有一个 isa 指针和
其他数据,并可以响应
选择器。当你调用“类
方法”像 [NSObject alloc],你是
实际上向那个发送消息
类对象。
既然一个类是一个对象,它一定是
其他类的一个实例:a
元类。元类是
类对象的描述,只是
就像类是描述
普通实例。特别是,
元类的方法列表就是类
方法:类的选择器
对象响应。当你发送一个
给类的消息 - 一个实例
元类 - objc_msgSend() 看起来
通过方法列表
元类(及其超类,如果
any) 来决定调用什么方法。
类方法由
元类代表类
对象,就像实例方法一样
由班级代表描述
实例对象。
元类呢?是吗
元类一路下降? A号
元类是根的一个实例
类的元类;根元类
本身就是根的一个实例
元类。 isa 链以 a 结尾
在此处循环:实例到类
元类到根元类到自身。
元类的行为是指针
很少有关系,因为在现实中
世界上没有人向其发送消息
元类对象。 [...]
更多有趣的读物:
Understanding the Objective-C Runtime 科林·惠勒
(搜索标题为“So Classes define objects...”的段落)
What is a meta-class in Objective-C? by Matt Gallagher