Подтвердить что ты не робот

Objective-C: предпочтительный способ получения суперкласса экземпляра класса

Мне интересно, какой из двух следующих методов является правильным или предпочтительным для получения суперкласса переменной Class:

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

  • Class getSuperclass(Class cls) { return class_getSuperclass(cls); }

4b9b3361

Ответ 1

Ну, docs на class_getSuperclass() скажите это:

Обычно вы должны использовать метод суперкласса NSObject вместо этого Функция

Итак, я бы пошел с дверью №1.

Ответ 2

Принятый ответ технически корректен (да, это то, что говорят документы), и все же это неправильный ответ.

[* суперкласс] существует только для объектов, которые являются подклассами NSObject.

Да, это большинство классов, которые вы используете каждый день.

Однако... есть много классов, с которыми вы можете столкнуться, которые не являются подклассами NSObject.

Простой пример: если вы перебираете "все загруженные классы" (например, используя objc_getClassList), многие из возвращаемых классов будут разбивать ваше приложение, если вы используете метод [Класс суперкласса].

Ответ 3

Я уверен, что они абсолютно идентичны, что означает, что NSObject superclass реализуется через class_getSuperclass. Я не уверен, но я бы поставил на него пиво.