Ответ JustSid точен, но немного более ясен:
По сравнению с другими ОО языками, в Objective-C отсутствуют интерфейсы . Вместо этого Objective-C использует протоколы, отмеченные директивой @protocol
.
Тип данных id
является анонимным объектом. Это объект Objective-C - это наверняка для компилятора. Компилятор знает, сколько места нужно зарезервировать для указателя на объект, но он не знает во время компиляции, является ли он NSString
, UIViewController
или чем.
Таким образом, когда вы используете тип id
, вы можете указать (в угловых скобках) протокол, которого должен придерживаться этот анонимный объект.
В приведенном выше коде при компиляции компилятор проверит любой объект, который вы указали для делегата CategoryAddViewController, и дважды проверьте, что вы реализовали все необходимые методы, определенные в протоколе.
Подводя итог, использование угловых скобок при использовании типа id
поможет компилятору сообщать вам, когда вы делаете что-то глупое.
Все это для времени компиляции - если вам нужно быть на 100% параноиком и во время выполнения, вы можете использовать conformsToProtocol:@protocol(foo)
для проверки на соответствие (я считаю, что это метод для любого объекта NSObject).