2010-08-08 20 views
159

Sınıfım var (ancak örnek yok) ve belirli bir protokole uyup uymadığını bilmem gerekiyor. Ancak, sınıf birkaç kez alt sınıflara ayrılabilir ve class_conformsToProtocol(), üst sınıflar üzerinde bildirilen protokolleri göz ardı eder.Objective-C Çalışma Zamanı: sınıfın protokole uygun olup olmadığını kontrol etmenin en iyi yolu?

Sadece class_getSuperclass() yöntemini kullanabilir ve üst sınıf sıfırlanana kadar hiyerarşideki tüm sınıfları yinelemeli olarak kontrol edebilirim. Ancak, derin iç içe geçmiş sınıf hiyerarşileri için verimsiz olabileceğini merak ediyorum ve belki de bunu yapmanın daha iyi bir yolu var mı?

Diğer bir deyişle, NSObject yöntemi, Objects-C çalışma zamanı yöntemleri kullanılarak en iyi uygulananToProtocol'ü nasıl üst üste koyar?

[myObject conformsToProtocol:@protocol(MyProtocol)]; 

Yinelemeli olarak sınıf hiyerarşisine çıkmak için doğru yolda isem, sadece bana bildirin.

cevap

283

According to the docs ,

[MyClass conformsToProtocol:@protocol(MyProtocol)]; 

çalışmalıdır. Kullanabileceğiniz

Class<MyProtocol> someClassPointer = nil; 

:

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)]; 
+4

Haklısın o gibi genel bir işaretçi olduğu durumda – LearnCocos2D

1

Veya. Geç oldu ve Xcode tarafından kod tamamlama önerileri yapılmadı. Sınıf tanımını kontrol ettim ve "typedef struct objc_class * Class" olduğunu görerek NSObject sınıf referansını kontrol etmedim.
İlgili konular