Mam klasę (ale nie mam instancji) i muszę wiedzieć, czy jest ona zgodna z określonym protokołem. Jednak klasa może być podklasą kilka razy, a class_conformsToProtocol () ignoruje protokoły zadeklarowane w nadklasach.
Mógłbym po prostu użyć class_getSuperclass () i rekurencyjnie sprawdzić wszystkie klasy w hierarchii w górę, aż nadklasa będzie zerowa. Zastanawiam się jednak, czy może to być nieefektywne w przypadku głęboko zagnieżdżonych hierarchii klas, a może jest na to lepszy sposób?
Innymi słowy, w jaki sposób metoda NSObject jest zgodna z protokołem zgodnym z protokołem, najlepiej zaimplementowana przy użyciu metod środowiska wykonawczego Objective-C, tak aby znajdowała protokoły w nadklasach?
[myObject conformsToProtocol:@protocol(MyProtocol)];
Jeśli jestem na dobrej drodze z rekurencyjnym przechodzeniem w górę hierarchii klas, po prostu daj mi znać.
źródło
self.delegate
implementuje wiele protokołów i chcę sprawdzić, czy jest zgodny z innymi niż jego klasa.[someObject conformsToProtocol:@protocol(MyProtocol)]
.Lub, jeśli jest to ogólny wskaźnik, taki jak:
możesz użyć:
źródło