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

      

  • 相关阅读:
    new SqlSessionFactoryBuilder().build(inputStream, properties)
    PooledDataSource--mybatis-3-mybatis-3.2.3
    MySQL 日期时间 专题
    使用httpclient抓取时,netstat 发现很多time_wait连接
    ajax提交整个form表单
    jquery 提交数据
    用form表单实现Ajax---post提交
    HTML 5 的data-* 自定义属性
    jquery序列化form表单使用ajax提交后处理返回的json数据
    jquery实现ajax提交form表单的方法总结
  • 原文地址:https://www.cnblogs.com/safiri/p/4010570.html
Copyright © 2011-2022 走看看