类类型和 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】:否NSObject
与Class
不同。
在 Objective C 中,类是对象。 NSObject
之类的类在 Class
类型的实例中。说NSObject
是Class
类型是正确的,就像你会说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