Что именно супер в 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
, но при использовании в выражении сообщения это означает "ищите реализацию, начинающуюся с таблицы методов суперкласса".
Эти сообщения в блоге о том, что такое мета класс? Получение подклассов, классов и метаклассов может дать вам некоторое представление об этом.