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

时间:2011-08-21 22:11:33

标签: objective-c objective-c-runtime

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

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

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

3 个答案:

答案 0 :(得分:24)

class_getSuperclass()上的docs说:

  

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

所以,我会去#1门。

答案 1 :(得分:4)

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

  

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

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

但是...... 可能遇到的很多类不是 NSObject子类。

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

答案 2 :(得分:2)

我很肯定他们完全相同,这意味着NSObject的{​​{1}}是通过superclass实现的。我不确定,但我打算喝啤酒。