Пока вы не используете обычный id
в качестве типа, компилятор по крайней мере предупредит вас, если вы допустите ошибку во время компиляции. Так что с вашим примером кода все должно быть в порядке.
Конечно, иногда вас могут заставить работать с id
объектом, который вы получаете из подсистемы, которая не находится под вашим контролем. В таких случаях вы можете привести объект обратно к типу, который вы считаете имеющимся у него (например, id <ReportGenerator>
), но вам, как правило, лучше, если вы сначала выполните проверку во время выполнения. Лучше быть в безопасности, чем потом сожалеть ...
И последнее замечание: если в вашем протоколе есть необязательные части (объявленные с ключевым словом @optional
), то для этих частей вы, очевидно, сможете выполнять только проверки во время выполнения. Ключевое слово @required
, упомянутое apurv, необходимо, только если вы хотите быть явным в объявлении протокола (части протокола требуются по умолчанию) или если вы смешиваете необязательные и обязательные части.