Неофициальные протоколы не"своего рода категория".
Если класс соответствует протоколу (например, @interface MyClass <MyProtocol>
), гарантируется, что вы можете вызывать все методы втот класс, который требуется для MyProtocol
.(Если класс действительно не реализует их [компоновщик не может знать об этом из-за динамического связывания], что является ошибкой программирования и ложью, но обычно это не так.)
Категории наС другой стороны, вы можете взять уже существующий класс и расширить его новыми методами (например, добавив метод removeAllSubviews
к уже существующему классу NSView
).
Итак, категории и протоколысовершенно противоположны друг другу.