isKindOfClass和isMemberOfClass 的区别

判断对象类型

-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例

-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例

测试实例:

新建Person类继承NSObject,新建Teacher类继承Person

新建Person类:

#import <Foundation/Foundation.h>  

@interface Person : NSObject
{
    NSString *name;
}
-(void)setName:(NSString*)n;  

@end
#import "Person.h"  

@implementation Person
-(void)setName:(NSString *)n
{
    name = n;
}  

@end  

新建Teacher类

#import "Person.h"  

@interface Teacher : Person  

-(void)teach;  

@end 
#import "Teacher.h"  

@implementation Teacher
-(void)teach
{
    NSLog(@"我教数学");
}
@end

我们先试验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类的成员");
   }  

打印结果:

2017-05-26 11:13:07.965 ObjectiveCTest[2460:f803] teacher Teacher类的成员

只有第一个判断打印出来,isMemberOfClass判断是否是属于这类的实例,是否跟父类有关系他不管。

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的子类");
}  

打印结果:

2017-05-26 11:15:17.315 ObjectiveCTest[2595:f803] teacher 是 Teacher类或Teacher的子类
2017-05-26 11:15:17.316 ObjectiveCTest[2595:f803] teacher 是 Person类或Person的子类
2017-05-26 11:15:17.316 ObjectiveCTest[2595:f803] teacher 是 NSObject类或NSObject的子类
三个结果都打印出来了。
时间: 2024-10-12 15:44:36

isKindOfClass和isMemberOfClass 的区别的相关文章

isKindOfClass和isMemberOfClass的区别

isKindOfClass和isMemberOfClass的区别 isKindOfClass和isMemberOfClass 都是NSObject的比较Class的方法 但两个有很大区别: isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员 isMemberOfClass只能确定一个对象是否是当前类的成员 例如:我们已经成NSObject派生了自己的类,isMemberOfClass不能检测任何的类都是基于NSObject类这一事实,而isKindOfClass可

OC中isKindOfClass与isMemberOfClass的区别

先给出官方介绍 isKindOfClass: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. isMemberOfClass:Returns a Boolean value that indicates whether the receiver is

isKindOfClass和isMemberOfClass 区别

isKindOfClass和isMemberOfClass 都是NSObject的比较Class的方法. 但两个有很大区别: isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员. isMemberOfClass只能确定一个对象是否是当前类的成员. 例如: NSArray *arr1 = [NSArrayarray]; NSArray *arr2 = [NSArrayarray]; NSObject *ob = [[NSObjectalloc] init]; NSL

isKindOfClass和isMemberOfClass

https://github.com/ming1016/study/wiki/Objc-Runtime 先看看isKindOfClass和isMemberOfClass在Object.mm中的实现 - (BOOL)isKindOf:aClass { Class cls; for (cls = isa; cls; cls = cls->superclass) if (cls == (Class)aClass) return YES; return NO; } - (BOOL)isMemberOf:

isKindOfClass,isMemberOfClass

- (BOOL)isKindOfClass:(Class)aClass; - (BOOL)isMemberOfClass:(Class)aClass; 特点: 1.isKindOfClass   判断是否是这个类(包括其父类及根类)或者这个类的子类的实例 2. isMemberOfClass  判断是否是这个类的实例 3.二者都可以判断是否是这个类

isKindOfClass:和isMemberOfClass:-b

isKindOfClass: 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) isKindOfClass能确定一个对象是否是一个类的成员,或者是派生自该类的成员 isMemberOfClass: Returns a Boolea

NSObject头文件解析 / 消息机制 / Runtime解读 (一)

NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h> @interface ClassA : NSObject @end 那么NSObject里面具体有什么呢? 我们点到它的头文件里面去看看 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; //每个NSObject对象都拥有一个Class类作为成员

多年iOS开发经验总结(一)

总结了几个月的东西终于能和大家分享了,不多说,直接看东西! 1.禁止手机睡眠 1 [UIApplication sharedApplication].idleTimerDisabled = YES; 2.隐藏某行cell 1 2 3 4 5 6 7 8 9 10 11 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // 如果是你需要隐藏的那一行,返回

ios开发一些基本按键

1.禁止手机睡眠 1 [UIApplication sharedApplication].idleTimerDisabled = YES; 2.隐藏某行cell 1 2 3 4 5 6 7 8 9 10 11 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // 如果是你需要隐藏的那一行,返回高度为0     if(indexPath.row == Y