Что именно супер в Objective-C?

Насколько я знаю, это указатель на суперкласс. Он жестко связан с суперклассом и не динамически вычисляется во время работы. Хотелось бы узнать об этом подробнее...

Кто-нибудь?

Ответы

Ответ 1

super

По существу, он позволяет использовать реализации суперкласса текущего класса.

Для gritty подробности Objective-C время выполнения:

[super message] имеет следующее значение:

Когда он встречает вызов метода, компилятор генерирует вызов одному из функции objc_msgSend, objc_msgSend_stret, objc_msgSendSuper, или objc_msgSendSuper_stret. Сообщения отправляется на суперкласс класса (используя ключевое слово super) отправляются с использованием objc_msgSendSuper; другие сообщения отправлен с использованием objc_msgSend. Методы, которые имеют структуры данных как возвращаемые значения отправляются с использованием objc_msgSendSuper_stret и objc_msgSend_stret.

Итак, это статично, а не определено во время выполнения.

Ответ 2

Это ключевое слово, эквивалентное self, но начинает его отправку сообщений с помощью таблицы методов суперкласса.

Ответ 3

super не является указателем на класс. Супер self, но при использовании в выражении сообщения это означает "искать реализацию, начиная с таблицы методов суперкласса".