Objective-C:检索Class实例的超类的首选方法

MKr*_*ert 14 objective-c objective-c-runtime

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

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

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

Ben*_*tto 25

那么,在文档class_getSuperclass()这样说:

您通常应该使用NSObject的超类方法而不是此函数

所以,我会去#1门.


Ada*_*dam 5

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

[* superclass]适用于 NSObject 子类的对象。

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

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

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