Objective-C Çalışma Zamanı: sınıfın protokole uygun olup olmadığını kontrol etmenin en iyi yolu?


171

Ben bir Sınıf (ama hiçbir örnek) var ve belirli bir protokole uygun olup olmadığını bilmek gerekir. Ancak, Sınıf birkaç kez alt sınıflara ayrılabilir ve class_conformsToProtocol () üst sınıflarda bildirilen protokolleri yoksayar.

Ben sadece class_getSuperclass () kullanın ve üst sınıf hil olana kadar hiyerarşideki tüm sınıfları tekrar tekrar kontrol edebilirsiniz. Bununla birlikte, bunun derin iç içe sınıf hiyerarşileri için verimsiz olup olmadığını merak ediyorum ve belki de bunu yapmanın daha güzel bir yolu var mı?

Başka bir deyişle, NSObject yöntemi en iyi nasıl Objective-C çalışma zamanı yöntemleri kullanılarak en iyi şekilde uygulanır, böylece üst sınıflardaki protokolleri bulur?

 [myObject conformsToProtocol:@protocol(MyProtocol)];

Eğer sınıf hiyerarşisinde sürekli olarak yukarı doğru hareket edersem bana haber ver.

Yanıtlar:


309

Dokümanlara göre ,

[MyClass conformsToProtocol:@protocol(MyProtocol)];

çalışmalı.


4
Haklısın. Geç oldu ve Xcode tarafından hiçbir kod tamamlama önerisi yapılmadı. Class tanımını kontrol ve "typedef struct objc_class * Sınıf" olduğunu görünce NSObject sınıf başvurusunu kontrol etmedi.
LearnCocos2D

Sınıf yerine bir örnek üzerinde yapmanın bir yolu var mı? Benim self.delegatebirden çok protokol uygular ve ben sınıf daha başkalarına uygun olup olmadığını kontrol etmek istiyorum.
Konrad Piascik

@KonradPiascik Onun yerine örneğinde diyoruz: [someObject conformsToProtocol:@protocol(MyProtocol)].
Wevah

3

Veya, genel bir işaretçi olması durumunda, örneğin:

Class<MyProtocol> someClassPointer = nil;

kullanabilirsiniz:

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.