OC学习62:isKindOfClass和isMemberOfClass和isSubclassOfClass的区别

张建 lol

isKindOfClass 实例方法

1
2
3
4
5
6
- (BOOL)isKindOfClass:(Class)aClass

Description
Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. (required)

// 意思是返回一个BOOL类型的值,该值表示 接收者 是 给定类的实例 还是从 该类继承的任何类 的实例。

isMemberOfClass 实例方法

1
2
3
4
5
6
- (BOOL)isMemberOfClass:(Class)aClass

Description
Returns a Boolean value that indicates whether the receiver is an instance of a given class. (required)

// 意思是返回一个BOOL类型的值,该值表示 接收者 是否为给定类的实例

isSubclassOfClass 类方法

1
2
3
4
5
6
7
8
9
10
// 注意这是一个类方法
+ (BOOL)isSubclassOfClass:(Class)aClass

Description
Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.

// 意思是返回一个BOOL类型的值,该值表示调用 该方法的类 是不是 参数类的一个子类 或者 是这个类的本身

// isSubclassOfClass 和 isKindOfClass 的作用基本上是一致的,只不过一个是类方法,一个是实例方法。

使用

ZJ类 继承自 Person类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import "Person.h"
#import "ZJ.h"

ZJ * zj = [ZJ new];
BOOL a = [zj isKindOfClass:[Person class]];
NSLog(@"zj 是否是 Person类或子类的 实例:%d",a);
BOOL b = [zj isKindOfClass:[ZJ class]];
NSLog(@"zj 是否是 ZJ类或子类的 实例:%d",b);
BOOL c = [zj isMemberOfClass:[Person class]];
NSLog(@"zj 是否是 Person类的 实例:%d",c);
BOOL d = [zj isMemberOfClass:[ZJ class]];
NSLog(@"zj 是否是 ZJ类的 实例:%d",d);

BOOL e = [ZJ isSubclassOfClass:[Person class]];
NSLog(@"ZJ类 是否是 Person类或子类:%d",e);
BOOL f = [ZJ isSubclassOfClass:[ZJ class]];
NSLog(@"ZJ类 是否是 ZJ类或子类:%d",e);

查看打印结果:

1
2
3
4
5
6
7
2023-06-20 11:44:45.308153+0800 isKindOfClass和isMemberOfClass[49380:3374953] zj 是否是 Person类或子类的 实例:1
2023-06-20 11:44:45.308219+0800 isKindOfClass和isMemberOfClass[49380:3374953] zj 是否是 ZJ类或子类的 实例:1
2023-06-20 11:44:45.308246+0800 isKindOfClass和isMemberOfClass[49380:3374953] zj 是否是 Person类的 实例:0
2023-06-20 11:44:45.308268+0800 isKindOfClass和isMemberOfClass[49380:3374953] zj 是否是 ZJ类的 实例:1

2023-06-20 13:06:29.706747+0800 isKindOfClass和isMemberOfClass[49888:3410485] ZJ类 是否是 Person类或子类:1
2023-06-20 13:06:29.706766+0800 isKindOfClass和isMemberOfClass[49888:3410485] ZJ类 是否是 ZJ类或子类:1
  • Post title:OC学习62:isKindOfClass和isMemberOfClass和isSubclassOfClass的区别
  • Post author:张建
  • Create time:2023-06-20 11:29:43
  • Post link:https://redefine.ohevan.com/2023/06/20/OC/OC学习62:isKindOfClass和isMemberOfClass和isSubclassOfClass的区别/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
OC学习62:isKindOfClass和isMemberOfClass和isSubclassOfClass的区别