可可對象是
meta
類對象。據我所知,這實際上是Objective-C類,但沒有規範。 那麼如何檢查兩個類對象之間的相等性?如何檢查一個類(元類對象)對象是否與另一個類對象相等
Class a = [@"" class];
Class b = [[NSObject alloc] init] class];
BOOL c = (a == b); // Is this right?
可可對象是
meta
類對象。據我所知,這實際上是Objective-C類,但沒有規範。 那麼如何檢查兩個類對象之間的相等性?如何檢查一個類(元類對象)對象是否與另一個類對象相等
Class a = [@"" class];
Class b = [[NSObject alloc] init] class];
BOOL c = (a == b); // Is this right?
有用於這一目的完全是一個方法。引自Apple's current official reference manual page。
-[NSObject isSubclassOfClass:]
返回一個布爾值,指示接收等級是否是的一個子類,或等同於,一個給定的類。
無論如何,這包括子類,如果你想確切相等比較,你應該使用另一種方法。
另見更多關於方法:How to determine whether class B is a subclass of class A?
對NSObject有一個方法。 isKindOfClass
[a isKindofClass:[b class]];
你可以在這裏閱讀更多關於反映在Objective-C,如果你想包括繼承
http://osmorphis.blogspot.com/2009/05/reflection-in-objective-c.html
madmik3是正確的。用你上面的例子,如果你測試了[a isKindOfClass:[b class]],它會測試YES,因爲NSString從NSObject繼承。
如果你想測試確切的類相等性,你可以使用isMemberOfClass:,它不包括繼承。在你的例子中[a isMemberOfClass:[b class]]將被測試爲NO,因爲NSString是與NSObject不同的類。
根據我的經驗,通常使用類方法進行測試,例如, [aMemberOfClass:[NSString類]]。
享受,
達明
只要是明確的,在'class'方法返回一個類,而不是一元類。 – jlehr 2012-02-11 17:15:48
@jlehr我在代碼中發現了嚴重錯誤。謝謝。 – Eonil 2012-02-12 03:52:41
可能重複的[如何確定類B是否是類A的子類?](http://stackoverflow.com/questions/7282249/how-to-determine-whether-class-b-is-a-subclass- a) – Eonil 2014-05-27 11:12:55