isMemberOfClassとisKindOfClassの区分
1903 ワード
この2つの方法はよく私たちを困惑させますが、どんな違いがありますか?
定義#テイギ#
isKindOfClass:このクラスまたはこのクラスのサブクラスであるか否かを判断する例
isMemberOfClass:このクラスのインスタンスかどうかを判断する
使用
使用については、ネット上でイメージ的な例を見て、ここで直接使ってみました.NSObjectに引き継がれたPerson,PersonのTeacherの2つのクラスがある
isKindOfClassを使用する例:
isMemberOfClassを使用する例:
定義#テイギ#
isKindOfClass:このクラスまたはこのクラスのサブクラスであるか否かを判断する例
isMemberOfClass:このクラスのインスタンスかどうかを判断する
使用
使用については、ネット上でイメージ的な例を見て、ここで直接使ってみました.NSObjectに引き継がれたPerson,PersonのTeacherの2つのクラスがある
#import
@interface Person : NSObject
{
NSString *name;
}
-(void)setName:(NSString*)n;
@end
#import "Person.h"
@implementation Person
-(void)setName:(NSString *)n
{
name = n;
}
@end
#import "Person.h"
@interface Teacher : Person
-(void)teach;
@end
#import "Teacher.h"
@implementation Teacher
-(void)teach
{
NSLog(@" ");
}
@end
isKindOfClassを使用する例:
Person *person = [[Person alloc] init];
Teacher *teacher = [[Teacher alloc] init];
//YES
if ([teacher isKindOfClass:[Teacher class]]) {
NSLog(@"teacher Teacher Teacher ");
}
//YES
if ([teacher isKindOfClass:[Person class]]) {
NSLog(@"teacher Person Person ");
}
//YES
if ([teacher isKindOfClass:[NSObject class]]) {
NSLog(@"teacher NSObject NSObject ");
}
isMemberOfClassを使用する例:
Person *person = [[Person alloc] init];
Teacher *teacher = [[Teacher alloc] init];
//YES
if ([teacher isMemberOfClass:[Teacher class]]) {
NSLog(@"teacher Teacher ");
}
//NO
if ([teacher isMemberOfClass:[Person class]]) {
NSLog(@"teacher Person ");
}
//NO
if ([teacher isMemberOfClass:[NSObject class]]) {
NSLog(@"teacher NSObject ");
}