Objective-Cにおけるインスタンスの判定について

Objective-Cで、Javaのinstanceofみたいな働きをするものがないかを調べていたら、isKindOfClassというものが見つかりました。これはinstanceofと同じように、インスタンスが指定したクラス、またはそのサブクラスかどうかを判定するものみたいです。また、似た種類のメソッドで、isMemberOfClassというメソッドがあることもわかりました。これは、インスタンスが指定したクラスと一致するかを判定するメソッドです。

これらを使えば、インスタンスが自分自身の場合のみ画像を描画して、サブクラスのものの場合は(サブクラスが担当するので)画像を描画しないといった処理が可能だと思われます。

例)isKindOfClassとisMemberOfClass

@implementation ParentViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    if ([self isKindOfClass:[ParentViewController class]]) {
        NSLog(@"Parent isKindOf True");
    } else {
        NSLog(@"Parent isKindOf False");
    }
    if ([self isMemberOfClass:[ParentViewController class]]) {
        NSLog(@"Parent isMemberOf True");
    } else {
        NSLog(@"Parent isMemberOf False");
    }
    if ([self class] == [ParentViewController class]) {
        NSLog(@"Parent True");
    } else {
        NSLog(@"Parent False");
    }
}
...
@end

@implementation ChildViewController // This class is a subclass of ParentViewController.

- (void)viewDidLoad {
    [super viewDidLoad];
    if ([self isKindOfClass:[ChildViewController class]]) {
        NSLog(@"Child isKindOf True");
    } else {
        NSLog(@"√ isKindOf False");
    }
    if ([self isMemberOfClass:[ChildViewController class]]) {
        NSLog(@"Child isMemberOf True");
    } else {
        NSLog(@"Child isMemberOf False");
    }
    if ([self class] == [ChildViewController class]) {
        NSLog(@"Child True");
    } else {
        NSLog(@"Child False");
    }
}
@end

これを実行すると、結果は以下のようになります。

```--- ParentViewControllerのインスタンス ---
Parent isKindOf True
Parent isMemberOf True
Parent True

--- ChildViewControllerのインスタンス ---
Parent isKindOf True
Parent isMemberOf False
Parent False
Child isKindOf True
Child isMemberOf True
Child True
```

この記事が役に立った場合、シェアしていただけると励みになります!!