Я думаю, что расположение протокола зависит от того, как вы его используете. В большинстве случаев протокол используется для определения функциональности делегата или источника данных для другого класса. Если это так, я думаю, вы можете смело поместить определение протокола в начало другого класса - поскольку они обязательно будут использоваться вместе.
Если вы определяете протокол вместо общего базового класса, вам, вероятно, следует поместить его в отдельный файл. Например, у меня есть несколько разных классов, которые реализуют протокол «Операция». Некоторые из моих других функций ожидают получения объекта, реализующего протокол, и не слишком заботятся о реальных классах. В этом случае имеет смысл поместить определение протокола в его собственный заголовочный файл, чтобы вы могли включить его самостоятельно.
Бенни прав, хотя - технически он будет определен независимо от того, где вы его положили (если он включен где-то до его использования).