2016-01-04 3 views
0
@protocol ZZCapturePipelineDelegate; 
@protocol ZZMediaManagerProtocol; 
@protocol ZZCapturePipelineProtocol <NSObject> 
... 
@end 

Я понимаю, что ZZCapturePipelineProtocol является протоколом, заявленным здесь. Однако я никогда не видел синтаксиса с несколькими @protocol в одном файле. Поскольку первые два протокола заканчиваются точкой с запятой, я предполагаю, что их целью является импорт или ссылка на их соответствующие файлы .h?Объявление протокола заканчивается точкой с запятой?

+0

Это, скорее всего, означает, что где-то в части '...' есть указатель-на-объект, который реализует один или оба из этих протоколов. Вопрос будет значительно улучшен, если вы указали строки, которые используют эти протоколы. – user3386109

ответ

3

Два из них называются forward declarations - т. Е. Вы сообщаете компилятору, что существуют протоколы, но без импорта заголовков, где они были определены. Это улучшает время сборки, потому что компилятору не нужно вставлять + компилировать содержимое других заголовков.

Вы можете найти более подробную информацию here.

+0

Значит, это показатель, который будет включать все эти протоколы? – Bonk

+2

В настоящее время это не улучшает время сборки. Это способ решения циклических зависимостей. – Sulthan

+0

@Yonk Nope, форвардная декларация имеет только одно значение. '@protocol ZZCapturePipelineDelegate;' говорит 'ZZCapturePipelineDelegate' является протоколом. Он ничего не говорит о реализации. Существуют также декларации о переходе для классов или функций. – Sulthan

Смежные вопросы