zoukankan      html  css  js  c++  java
  • OC中的动态类型检测和响应方法

    1.判断一个实例是否是某个类(或者此类的子类/子子类...)的实例化:

    [d isKindOfClass:[Dog class]] ;//d为实例化的对象,后面为判断是否是此类(或者此类的子类/子子类...)的实例化的类,代码:

    #import <Foundation/Foundation.h>
    #import "Dog.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
           
            Dog *d = [Dog new];//实例化一个狗对象
    
            BOOL b = [d isKindOfClass:[Dog class]];//定义一个bool类型接受函数的返回值,d为实例化的对象,后面为判断是否是此类的实例化的类
            
            if(b == true)//当为真的时候
            {
            
                NSLog(@"这是狗的实例");
            }
            else//假的时候
            {
            
                NSLog(@"这不是狗的实例");
            }
            
        }
        return 0;
    }
    

    2.判断一个实例是否是某个类(不包括子类)的实例化:

    +(bool)[d isMemberOfClass:[Dog class]] ;

    这个是类方法

    3.判断类1是否是指定类2的子类

    [类名1 isSubclassOfClass:[类名2 class] ]

    二:响应方法

    1.判读实例是否有某个方法:

    SEL s1 = @selector(lookHome);

    BOOL b = [animal respondsToSelector:s1];

    代码如下:

     1 #import <Foundation/Foundation.h>
     2 #import "Dog.h"
     3 
     4 int main(int argc, const char * argv[]) {
     5     @autoreleasepool {
     6         
     7         Animal *a = [Animal new];
     8         
     9         SEL s1 = @selector(lookHome);
    10         BOOL b = [a respondsToSelector:s1];
    11         
    12         if(b==true){
    13         
    14             NSLog(@"里面有这个方法");
    15         }
    16         else {
    17         
    18             NSLog(@"没有");
    19         }
    20     }
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    Python 学习记录1
    IL 汇编学习笔记(四)
    Petshop 4 学习
    MSN robot 开发相关资料
    MSDN 中文网站的某些翻译简直让人抓狂
    GridView 中如何给删除按钮添加提示
    MSDTC 分布式事务无法启动
    IL 汇编学习笔记(一)
    ASP.NET 2.0 之 Master Page 学习笔记
    IL 汇编学习笔记(二)
  • 原文地址:https://www.cnblogs.com/chenqingxiao/p/4382567.html
Copyright © 2011-2022 走看看