14

我想知道以下两种方法中哪一种是检索Class变量超类的正确或首选方法:

  1. Class getSuperclass(Class cls) { return [cls superclass]; }

  2. Class getSuperclass(Class cls) { return class_getSuperclass(cls); }

4

3 回答 3

25

好吧,文档class_getSuperclass()这样说的:

你通常应该使用 NSObject 的超类方法而不是这个函数

所以,我会选择 1 号门。

于 2011-08-21T22:14:10.830 回答
5

接受的答案在技术上是正确的(是的,这就是文档所说的),但它是一个不正确的答案。

[* superclass]存在于作为 NSObject 子类的对象。

是的,这是您日常使用的大部分课程。

但是......您可能会遇到许多不是NSObject 子类的类。

简单的例子:如果你遍历“所有加载的类”(例如使用 objc_getClassList),那么如果你使用 [Class superclass] 方法,许多返回的类将会使你的应用程序崩溃。

于 2012-10-08T02:05:07.373 回答
2

我很肯定它们是绝对相同的,这意味着NSObject'ssuperclass是通过class_getSuperclass. 我不确定,但我会赌上一杯啤酒。

于 2011-08-21T22:15:50.500 回答