Сопоставление Senior Протоколы, POP и дженерики обновлено
Какой вызов как диспетчеризуется
Вопрос
Сопоставьте вызов и вид диспетчеризации.
Попробуйте сами
Нажмите слева, потом подходящее справа.
Показать ответ и разбор
Коротко
Тип значения нельзя наследовать, поэтому вызовы статические. Метод открытого класса может быть переопределён, нужна vtable.
Правильные пары
Метод
structСтатическаяНепереопределённый метод
open class через ссылку на базовый классЧерез vtableТребование протокола через
any PЧерез witness tableМетод
@objc dynamicЧерез Objective-C runtime (objc_msgSend)Разбор
Тип значения нельзя наследовать, поэтому вызовы статические. Метод открытого класса может быть переопределён, нужна vtable. Требования протоколов через existential идут по witness table. @objc dynamic отправляет сообщение через рантайм, что нужно для KVO.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Задача на Swift: дженерик-очередь на двух стеках
Следующий вопрос
Что выведет Swift: требование протокола и метод расширения
Термины по теме
Ещё по теме «Протоколы, POP и дженерики»
- Протокол делегата и weak
- Протокол с associatedtype как тип параметра
- Условное соответствие протоколу
- Метод из расширения протокола: какая реализация вызовется
- Ограничение дженерика Comparable
- Как ускорить вызов методов класса
- Что такое associatedtype
- Виды диспетчеризации в Swift