Si ceux-ci sont tous les codes que vous avez créé, la meilleure façon de le faire est sans doute de faire la classe elle-même Layer
adopter le protocole, plutôt que la variable.
@interface Layer : NSObject <CocosNodeOpacity> { ... }
Un des principaux avantages de cette approche est que le compilateur vérifiera si vous avez mis en œuvre toutes les méthodes requises dans le protocole au moment de la compilation, qui est généralement ce que vous voulez. L'ajout des méthodes au même endroit que le reste de l'implémentation de la classe standard est plus facile à comprendre (pas de recherche pour trouver le code magique) et moins fragile que l'utilisation de catégories (l'ajout de la même méthode via différentes catégories peut entraîner un comportement indéfini) . En règle générale, je n'utilise les catégories que lorsque a, comme l'ajout de méthodes au code tiers (source fermée).
Si vous ne contrôlez pas la source de Layer
, vous devrez peut-être utiliser ce lieu lorsque vous déclarez votre Ivar:
Layer<CocosNodeOpacity> *content;
Notez que l'adoption d'un protocole vous permet de taper statiquement les variables avec un type de classe et obtenez des avertissements de compilation si les méthodes ne sont pas présentes. Cependant, vous n'obtenez pas les méthodes «gratuitement», car vous devez toujours les implémenter.Pourtant, l'utilisation judicieuse des protocoles et le typage statique peuvent rendre votre code plus robuste et «fail-fast» que d'utiliser id
comme type pour tout. Vous devez être félicité pour ne pas simplement prendre la voie facile. :-)
Pour plus d'informations sur les protocoles (y compris les méthodes obligatoires et facultatives), voir this SO answer.