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

 

 

  

 

posted @ 2014-10-08 10:12  safiri  阅读(173)  评论(0编辑  收藏  举报