Что именно супер в Objective-C? - PullRequest
48 голосов
/ 22 июня 2010

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

Кто-нибудь?

Ответы [ 4 ]

46 голосов
/ 22 июня 2010

super

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

Для песчаных подробностей времени выполнения Objective C:

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

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

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

29 голосов
/ 22 июня 2010

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

19 голосов
/ 22 июня 2010

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

5 голосов
/ 22 июня 2010

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

...