Формальные протоколы - это прежде всего тщеславие во время компиляции, чтобы помочь вам быть более ясным в своих намерениях.Это относительно недавнее изобретение, до которого все протоколы были неформальными - они были частью документации класса, но не были объявлены в коде.Они имеют эффект времени выполнения в том смысле, что вы можете использовать некоторые из методов времени выполнения Objective C для запроса, отвечает ли определенный класс определенному протоколу (так же, как вы можете запросить, отвечает ли определенный класс определенному селектору), но такого тестирования нетпроизойдет во время выполнения, когда вы передадите объекты.
Протоколы - это просто контракт, определяющий коммуникации и не определяющий поведение.Так что нет понятия наследования.И нет списка времени выполнения селекторов, включенных в протокол, поэтому идея не особенно полезна.
Ваш лучший способ - определить дополнительный протокол, который включает в себя дополнительные функции, которые вы хотите.Напишите ваши новые объекты для реализации обоих протоколов.Расширьте классы, которые вам не нужны, или у вас нет доступа к использованию методов категорий.
Если вам требуется дополнительное хранилище для обработки новых полей, тогда подкласс наиболее безопасно.В настоящее время вы можете добавлять переменные экземпляра во время выполнения, но вам нужно перейти к интерфейсу C во время выполнения Objective-C, и для нахождения возможности для этого потребуются некоторые прыжки с обручем.