zoukankan      html  css  js  c++  java
  • 2.检测实例或类方法是否可用

    问题:

      在最新的SDK上进行开发,但是你希望对运行旧版本的设备也支持.

      程序必须不断检查实例或类方法是否存在,否则程序会是脆弱的,因为部署的装置的 SDK 版本,不一定是最新的,也许方法会不存在。 

    讨论:

      有两个关于iOS SDK的概念:

      Base SDK(基底SDK):这个 SDK 是用来编译应用程序。可能是最新最大的 SDK,且能存取所有新的 API

      Deployment SDK/Target(部署SDK):是指定你希望编译后并执行的装置SDK 版本。 

    方案:

      使用 NSObject 的 instancesRespondToSelector:类方法检测指定的 selector 是否存在类实例中。

      要确认一个类是否响应本身的类方法,需使用 respondsToSelector:类方法。  

      你可以使用同样方式检测在一个实例的实例方法

    例子:

    //2.1在这个例子中,我们正在检查存在的具体实例方法,使用 instancesRespondToSelector:NSMutableArray 类(这 NSArray 的子类)的类的方法。另外, 我们可以使用数组实例方法 respondsToSelector:
            NSMutableArray *array1 = [[NSMutableArray alloc]initWithObjects:
                                      @"Item 1",
                                      @"Item 4",
                                      @"Item 3",
                                      @"Item 2",
                                      @"Item 5",nil];
            NSLog(@"Array = %@",array1);
            if ([NSArray instancesRespondToSelector:@selector(sortUsingComparator:)]) {
                //用sortUsingComparator:方法对array1排序
            }
            else if ([NSArray instancesRespondToSelector:@selector(sortUsingFunction:context:)]){
                
            }else{
                //do something else
            }
            if ([array1 respondsToSelector:@selector(sortUsingFunction:context:)]) {
                NSLog(@"1");
            }else if ([array1 respondsToSelector:@selector(sortUsingComparator:)]){
                NSLog(@"2");
            }

      

  • 相关阅读:
    TTL电平和CMOS电平总结
    掩码
    关于Autosar中DCM(14229UDS)模块的理解
    Diagnostic Trouble Code诊断故障码
    eclipse搭建android开发环境
    在ubuntu下安装zookeeper
    redis的windows版本下载地址及windows的客户端工具
    最简单的启动并连接一个redis的docker容器
    转:Redis介绍及常用命令大全
    redis常用命令
  • 原文地址:https://www.cnblogs.com/safiri/p/4010570.html
Copyright © 2011-2022 走看看