Il y a un - [NsObject ConformsProtocol:] code> pour vérifier si un protocole spécifique est adopté ou non. Existe-t-il une méthode pour obtenir tous les protocoles d'adoption d'une classe plutôt que de vérifier une liste? P>
3 Réponses :
Vous pouvez essayer objc_copyprotocolliste p>
I.e. Vous obtenez la liste de tous les protocoles, puis vérifiez si l'objet actuel est conforme à un protocole spécifique en itérant la liste. P>
EDIT: P>
La solution H2CO3 est vraiment meilleure une p>
Ou class_copyprotocolliste () code>.
Comment l'utiliser pratiquement?
Je ne pense pas que objc_copyprotocollist () code> est la bonne option ici - qui obtient tous les protocoles que existez i>, n'importe où.
class_copyprotocolliste () code> vous dit quels protocoles une classe déclare être conforme à la conformité.
Il y a une solution plus élégante: class_copyprotocolliste () code>
directement strong> renvoie les protocoles adoptifs d'une classe. Utilisation:
Il ne faut que garder à l'esprit que cette liste ne contient pas les protocoles adoptés par les superclasses. Selon la manière dont cette liste est utilisée pour - il pourrait être nécessaire de monter la chaîne de superclassement et d'appeler la classe_copyprotocolliste ().
@Martinr Exactement, exactement, j'avais eu du mal à comprendre pourquoi cela n'a pas répertorié de protocoles pour Nsmutabledictionner (code> ...
C'est une bonne réponse. Sa bonne finesse. Cela pourrait ne pas fonctionner avec l'arc. Mais cela fonctionnera avec des non-arcs à coup sûr. Merci.
Si vous essayez de Obtenir ceci pour travailler avec Arc B> et obtenir une erreur de compilation, il suffit d'ajouter __ dangereux_unéré code> juste avant
protocole ** p code> l.
Il y a exactement pas besoin de descendre aux méthodes d'exécution du niveau C du tout, au moins pour la première limbe de votre question. Il n'y a rien dans NsObject + ConformeSoprotocol code> ; La conformité du protocole est déclarée dans le cadre du
@interface code> de sorte qu'il n'est pas spécifique à chaque instance. Donc, e.g.
NsObject code> pour obtenir une liste de protocoles pris en charge. P> p>
Qu'est-ce que vous essayez exactement d'accomplir cela?
@ RICHARDJ.ROSSIII J'ai souvent utilisé la conformité du protocole où j'ai besoin d'un objet général pour pouvoir choisir puis expédier des travaux sur une cible appropriée (par exemple, un
utableviewatasource code> pour pouvoir choisir une cellule pour un objet donné, puis définissez cet objet); Je juge que c'est plus maintenu et nécessite moins de redéclaration pour le répartiteur pour trouver des objectifs appropriés via le temps d'exécution, puis les interroger sur ce qu'ils attendent. Des pensées sur ce modèle?