Категории не имеют какой-либо специальной реализации , они фактически по своей природе лишены реализации.
Протоколы действуют как маркеры для классов во время выполнения.Вы можете использовать class_copyProtocolList()
, чтобы получить список протоколов, которым класс соответствует из среды выполнения.Существует функция protocol_copyProtocolList()
для получения протокола, которому соответствует протокол.
Обратите внимание, что эти методы возвращают только список протоколов для этого конкретного класса или протокола.Не из суперклассов или других протоколов по ссылке.Это означает, что фактический поиск во время выполнения будет дорогим.Вместо этого используйте class_conformsToProtocol()
(или protocol_conformsToProtocol()
) для запроса соответствия, эти методы могут кэшировать результат.
На практике запросы на соответствие во время выполнения редко бывают полезными.Соответствие протокола подтверждается предупреждениями компилятора, если разработчик решает игнорировать эти предупреждения, что ж ... это их выбор.