【发布时间】:2014-07-08 12:55:59
【问题描述】:
我试图理解 Class 在 Objective-C 中的类型。请问Class类型和NSObject类型有什么区别?听起来 Class 类型做了类似NSObject 的事情,对吗?
【问题讨论】:
标签: objective-c nsobject
我试图理解 Class 在 Objective-C 中的类型。请问Class类型和NSObject类型有什么区别?听起来 Class 类型做了类似NSObject 的事情,对吗?
【问题讨论】:
标签: objective-c nsobject
我相信这个问题已经被问过好几次了......但我找不到任何旧实例,所以无论如何。
与类 C++ 语言不同,类是 OBJC 中的实际常规对象实例。
当您调用[NSObject class] 时,它会返回一个包含类方法和额外信息的活动对象。这些是由编译器合成的,这实际上提供了所有类相关的功能。
Class 是这些类对象的类型。
还有一件事。因为Class对象是对象,所以它们也有类对象,这些被称为元类。有关更多详细信息,请参见此处:
http://www.cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html
此外,您可能会感到困惑,因为 Cocoa 中的大多数类型都使用 NSObject 作为根类。但这只是一个约定,实际上一个类不必继承NSObject。
【讨论】:
否NSObject 与Class 不同。
在 Objective C 中,类是对象。 NSObject 之类的类在 Class 类型的实例中。说NSObject 是Class 类型是正确的,就像你会说NSObject 的一个实例是NSObject 类型一样。
Class 也是一个对象,但它的类型是元类,真的不适合初学者。
【讨论】:
一个类是一个模板,例如一个人 对象是类的实例,例如鲍勃人类
NSObject 是大多数 Objective-C 类的根类(例如 NSTextField、NSButton 等) 所以,NSButton 继承了 NSObject 的属性,也是一个类(子类)。如果您创建一个按钮,该按钮现在是一个实例(对象),类型为 NSButton(类),它继承自: NSControl : NSView : NSResponder : NSObject 按降序排列。
【讨论】: