Я думаю, что это должно быть очень распространенной проблемой в программировании игр, когда у вас много персонажей с различными возможностями.
Я использую протоколы для определения действий для символов, где это возможно, и наследования, когда мне нужны объекты для совместного использования больших блоков кода. Проблема с протоколами заключается в том, что они определяют только интерфейс, поэтому реализация часто является дублирующим кодом. Есть ли лучший подход к этой проблеме, или в этом случае приемлемо иметь некоторое дублирование кода? В Objective-C нет множественного наследования, так что об этом не может быть и речи.