2012-02-11 4 views
2

メタ クラスオブジェクトであるClassオブジェクトがココアにあります。私が知っているように、これは実際Objective-Cクラスですが、仕様はありません。 2つのクラスオブジェクト間の等価性を確認するにはどうすればよいですか?クラス(メタクラスオブジェクト)オブジェクトをチェックする方法は、別のクラスオブジェクトと同じです

Class a = [@"" class]; 
Class b = [[NSObject alloc] init] class]; 

BOOL c = (a == b); // Is this right? 
+1

だけ明確にすること、 'class'メソッドは、クラスではなく、メタクラスを返します。 – jlehr

+0

@jlehr私は自分のコードで重大な間違いを発見しました。ありがとう。 – Eonil

+0

[クラスBがクラスAのサブクラスかどうかを判断する方法](http://stackoverflow.com/questions/7282249/how-to-determine-whether-class-b-is-a-subclass- of-class-a) – Eonil

答えて

3

、お楽しみください。 Apple's current official reference manual pageから引用。

-[NSObject isSubclassOfClass:] 

受信クラスは、サブクラス、もしくは特定のクラス、同一であるかどうかを示すブール値を返します。

とにかく、これはサブクラスを含み、そしてあなたが正確な等価比較をしたい場合、あなたは別の方法を使用する必要があります。

は、メソッドの詳細のために参照:How to determine whether class B is a subclass of class A?

4

madmik3が正しいここではObjective-Cで反射についての詳細を読むことができます。上の例では、[a isKindOfClass:[b class]]をテストすると、NSStringがNSObjectから継承するため、YESをテストします。

正確なクラスの等価性をテストする場合は、継承を含まないisMemberOfClass:を使用できます。あなたの例では、[isMemberOfClass:[b class]]は、NSStringがNSObjectとは異なるクラスであるため、NOとしてテストします。

私の経験では、クラスメソッドを使用してテストするのが一般的です。 [isMemberOfClass:[NSStringクラス]]。

は、まさにこの目的のための方法があります

ダミアン

関連する問題