【问题标题】: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多