Ответ 1
Ну, docs на class_getSuperclass()
скажите это:
Обычно вы должны использовать метод суперкласса NSObject вместо этого Функция
Итак, я бы пошел с дверью №1.
Мне интересно, какой из двух следующих методов является правильным или предпочтительным для получения суперкласса переменной Class
:
Class getSuperclass(Class cls) { return [cls superclass]; }
Class getSuperclass(Class cls) { return class_getSuperclass(cls); }
Ну, docs на class_getSuperclass()
скажите это:
Обычно вы должны использовать метод суперкласса NSObject вместо этого Функция
Итак, я бы пошел с дверью №1.
Принятый ответ технически корректен (да, это то, что говорят документы), и все же это неправильный ответ.
[* суперкласс] существует только для объектов, которые являются подклассами NSObject.
Да, это большинство классов, которые вы используете каждый день.
Однако... есть много классов, с которыми вы можете столкнуться, которые не являются подклассами NSObject.
Простой пример: если вы перебираете "все загруженные классы" (например, используя objc_getClassList), многие из возвращаемых классов будут разбивать ваше приложение, если вы используете метод [Класс суперкласса].
Я уверен, что они абсолютно идентичны, что означает, что NSObject
superclass
реализуется через class_getSuperclass
. Я не уверен, но я бы поставил на него пиво.