Строка @protocol ParseOperationDelegate;
не определяет протокол. Это предварительная декларация . По сути, это говорит о том, что «протокол с именем ParseOperationDelegate
существует и определяется где-то еще в коде».
Они делают это, чтобы компилятор не умер с ошибкой в строке, которая идет id <ParseOperationDelegate> delegate;
. Альтернативой было бы поместить все определение протокола перед определением интерфейса (что лично я думаю, было бы лучшим решением в этом случае).
В таком простом случае, как этот, я думаю, нет смысла иметь предварительную декларацию. Но вы можете легко представить себе более сложный случай, когда, возможно, определение протокола находится в своем собственном заголовочном файле (или в заголовочном файле для некоторого другого класса). В таком случае использование предварительного объявления позволяет избежать необходимости #import
файла заголовка протокола в заголовке вашего класса. На самом деле это небольшая разница, но она может быть полезна.