类类型和 NSObject 类型

Posted

技术标签:

【中文标题】类类型和 NSObject 类型【英文标题】:Class type and NSObject type 【发布时间】:2014-07-08 12:55:59 【问题描述】:

我试图理解 Class 在 Objective-C 中的类型。请问Class类型和NSObject类型有什么区别?听起来 Class 类型做了类似NSObject 的事情,对吗?

【问题讨论】:

【参考方案1】:

我相信这个问题已经被问过好几次了......但我找不到任何旧实例,所以无论如何。

与类 C++ 语言不同,类是 OBJC 中的实际常规对象实例。 当您调用[NSObject class] 时,它会返回一个包含类方法和额外信息的活动对象。这些是由编译器合成的,这实际上提供了所有类相关的功能。

Class 是这些类对象的类型。

还有一件事。因为Class对象是对象,所以它们也有类对象,这些被称为元类。有关更多详细信息,请参见此处: http://www.cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html

此外,您可能会感到困惑,因为 Cocoa 中的大多数类型都使用 NSObject 作为根类。但这只是一个约定,实际上一个类不必继承NSObject

【讨论】:

【参考方案2】:

NSObjectClass 不同。

在 Objective C 中,类是对象。 NSObject 之类的类在 Class 类型的实例中。说NSObjectClass 类型是正确的,就像你会说NSObject 的一个实例是NSObject 类型一样。

Class 也是一个对象,但它的类型是元类,真的不适合初学者。

【讨论】:

【参考方案3】:

一个类是一个模板,例如一个人 对象是类的实例,例如鲍勃人类

NSObject 是大多数 Objective-C 类的根类(例如 NSTextField、NSButton 等) 所以,NSButton 继承了 NSObject 的属性,也是一个类(子类)。如果您创建一个按钮,该按钮现在是一个实例(对象),类型为 NSButton(类),它继承自: NSControl : NSView : NSResponder : NSObject 按降序排列。

更多信息: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

【讨论】:

以上是关于类类型和 NSObject 类型的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型 [NSObject] 的值分配给类型 NSObject

我的 swift 函数的返回类型必须继承自 NSObject

未能创建本机类型“NSObject”的实例

id instancetype NSObject *的区别

id类型

无法将“对象”表达式转换为类型“MonoTouch.Foundation.NSObject”