• 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
  • 相关阅读:
    ubnt+ros 接入无线
    生成new, old的 shell script
    lua学习记录
    反编译dtsi
    抓包软件PowerSniff开发计划
    android的ArrayMap类
    京东买的5本书
    c++ 变量必须初始化吗???
    cocos2dx 很好的源码分析博文
    cocos2dx 最基本,纯色、字体、图片
  • 原文地址:https://www.cnblogs.com/chenqingxiao/p/4382567.html
Copyright © 2020-2023  润新知