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

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

Кто-нибудь?

4 ответа

Решение

super

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

Для мельчайших подробностей времени выполнения 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.

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

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

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

Эти сообщения в блоге о том, что такое мета класс? Получение подклассов, классов и метаклассов может дать вам некоторое представление об этом.

Другие вопросы по тегам