Протоколы в Obj-C синтаксически не похожи, скажем, на «интерфейсы» в Java, где синтаксис для указателей на интерфейсы и указателей на подклассы, по существу, одинаков.
то, как вы говорите «объект, который соответствует Runnable
. id
является ссылкой на любой тип объекта, а нотация <
>
выражает явное соответствие данному протоколудля проверки типа.
Если вы говорите Foo *
, вы имеете в виду объект типа Foo
или одного из его подклассов.
Это просто таксинтаксис Obj-C для этого. С этим синтаксисом семантика похожа на то, что вы получите, например, на Java.