Wednesday, May 2, 2012

NSObject のクラス名判定

id 型で受け取った場合など、NSObject のクラス名判定をおこないたい場合があります。

サブクラスかどうか判定するには isKindOfClass を使います。

NSMutableArray *array = [[NSMutableArray alloc] init];
if ([array isKindOfClass:[NSArray class]]) {
    ....
}

同クラスかどうか判定するには isMemberOfClass を使います。

NSMutableArray *array = [[NSMutableArray alloc] init];
if ([array isMemberOfClass:[NSArray class]]) {
    // NSArray のサブクラスですが、NSArray ではないので NO
}
if ([array isMemberOfClass:[NSMutableArray class]]) {
     // NSMutableArray なので YES
}

クラスメゾッドとして isSubclassOfClass も定義されています。

if ([NSMutableArray isSubclassOfClass:[NSArray class]]) {
    // class からクラスメゾッドで判定できます
}