zoukankan      html  css  js  c++  java
  • isMemberOf与isKindOf的区别

    这两个方法常常会困惑我们,它们有什么区别呢?

    定义

    首先,我们来看看它们的定义。

    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 an instance of a given class.

    使用

    关于使用,在网上看到一个很形象的例子,这里就直接拿来用了。

    这里有两个类,分别是继承于NSObject的Person,Person的Teacher

    #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
    #import "Person.h"   
      
    @interface Teacher : Person  
      
    -(void)teach;  
      
    @end  
     
    #import "Teacher.h"   
      
    @implementation Teacher  
    -(void)teach  
    {  
        NSLog(@"我教数学");  
    }  
    @end


    使用isKindOfClass的例子:

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
    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的子类");  
    }  
    [person release];  
    [teacher release];  
    [pool release];

    输出结果:

    2012-07-04 14:34:17.315 ObjectiveCTest[2595:f803] teacher 是 Teacher类或Teacher的子类
    
    2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 Person类或Person的子类
    
    2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 NSObject类或NSObject的子类


    使用isMemberOfClass的例子: 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
       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类的成员");  
       }  
       [person release];  
       [teacher release];  
       [pool release];


    输出结果: 

    2012-07-04 14:23:07.965 ObjectiveCTest[2460:f803] teacher Teacher类的成员


    看了这两个例子,应该就会明白了。

  • 相关阅读:
    PowerDesigner 15 之Check Model报错信息详解
    js出现:类不支持Automation操作
    IIS错误解决整理
    JavaScript页面跳转的几种方法
    JavaScript刷新上一级页面
    SQL 截断字符串查询(CharIndex()函数)
    JS 判断CHECKBOX复选框多选及选中项验证
    SQL 分组后返回序号(ROW_NUMBER () OVER(PARTITION BY order_no ORDER BY START_Time ASC 的使用方法)
    jquery 获取父窗口的元素 父窗口 子窗口[资料来源于网络]
    SQL Case When Then Else End的使用收集
  • 原文地址:https://www.cnblogs.com/fuunnyy/p/4724816.html
Copyright © 2011-2022 走看看