Sono nuovo di XCode. Voglio sapere come posso sapere che tutte le classi sono conformi a determinati protocolli in XCode 4.3.1? E come posso conoscere tutte le sottoclassi di una classe?Come posso ottenere l'elenco di tutte le classi conformi a determinati protocolli in XCode 4?
risposta
Utilizzare Objective-C runtime functions.
objc_getClassList
per ottenere l'elenco deiClass
esclass_getSuperclass
o il metodo-superclass
di percorrere la catena di superclasseclass_conformsToProtocol
o il metodo-conformsToProtocol:
per verificare se una classe è conforme a un protocollo
Protocol *protocol = @protocol(YourProtocol);
int numberOfClasses = objc_getClassList(NULL, 0);
Class *classList = malloc(numberOfClasses * sizeof(Class));
numberOfClasses = objc_getClassList(classList, numberOfClasses);
for (int idx = 0; idx < numberOfClasses; idx++)
{
Class class = classList[idx];
if (class_getClassMethod(class, @selector(conformsToProtocol:)) && [class conformsToProtocol:protocol])
{
NSLog(@"%@", NSStringFromClass(class));
}
}
free(classList);
Sono nuovo alla programmazione ObjC, ma conosco bene C. Vedi qualche potenziale problema a fare Class classList [numberOfClasses]; invece di malloc + gratis? – Tommy
@ Tommy Bene, hai ragione, sarebbe più veloce allocare memoria nello stack –
e anche meno cose che possono andare storte, che è quasi sempre meglio. – Tommy
- 1. Come elencare tutte le classi conformi al protocollo in Swift?
- 2. Ottenere tutte le Classi estesi in PHP
- 3. Ottenere Elenco di tutte le classi native
- 4. Ottenere tutte le classi nel Classpath
- 5. Come ottenere tutte le icone di sistema in Xcode
- 6. Ottenere tutte le classi interne per riflessione
- 7. Come ottenere tutte le classi CSS di un elemento?
- 8. Come posso estrarre tutte le classi in un file separato?
- 9. Come posso disabilitare l'indicizzazione in Xcode 4?
- 10. Come ottenere tutte le classi con Javassist usando un pattern
- 11. Ottenere tutte le classi ereditarie di una generica classe astratta
- 12. XCode 4 Generazione di classi da entità in CoreData
- 13. Come posso ottenere tutte le classi in uno spazio dei nomi?
- 14. Come posso elencare tutte le classi caricate in un caricatore di classi specifico
- 15. Come utilizzare le azioni del punto di interruzione Xcode 4
- 16. Vedere tutte le classi super-in Java
- 17. Come posso ottenere le classi javafx in runtime?
- 18. Come posso ottenere tutte le lettere alfabetiche in PHP?
- 19. Elenco di tutte le classi di dominio in Grails
- 20. Come ottenere un dump di tutte le variabili locali?
- 21. Come posso avere una variabile costante comune a tutte le classi in un pacchetto?
- 22. Come aggiungere classi a Laravel 4 Forms
- 23. Ottieni tutte le proprietà che hanno contrassegnato determinati attributi
- 24. Come posso assegnare una funzione o una proprietà a tutte le altre classi come ToolTip
- 25. Come generare automaticamente stub per i protocolli in XCode 4.2?
- 26. Come ottenere tutte le femmine?
- 27. In Swift come posso filtrare una matrice di oggetti conformi a un protocollo dalla loro classe?
- 28. Come posso ottenere tutte le categorie e sottocategorie?
- 29. Come posso ottenere tutte le immagini da un file qrc?
- 30. Come chiamare i metodi sovrascritto in tutte le classi derivate
fwiw, 'class_conformsToProtocol' è WAY più veloce di' -conformsToProtocol'. Questo è un bel collo di bottiglia in una grande app con migliaia di classi –