iOS开发——来改掉那些已经过时的方法吧(持续更新中)

     iOS平台在快速的发展,各种接口正在不断的更新。随着iOS9的发布,又有一批老方法不推荐使用了,你若调用这些方法,运行的结果是没有问题的,但是会出现警告“***is deprecated :first deprecated in iOS 9.0 - Use *******”.就像如图所示:


       在实际项目开发中,我们要秉承一个信念就是:要把每一个警告当做错误来处理,并解决每一个警告。你想想,你运行一个项目,就算运行成功了,但是出现几十个、甚至几百个黄黄的警告,心情是不是很糟糕呢?我将在这篇博客结合我的开发经验,罗列出iOS9中不推荐使用的方法,并换成苹果最新推荐的方式。本篇博客将会持续更新。

       首先告诉大家一个去除这类警告的小技巧,如果编译器提示***在iOS 9.0中被弃用了,那么你把项目的部署目标(Deployment Target)设置为小于9.0就不会出现这个警告了。其他的也相同。如果***在iOS 8.4被弃用了,那么你部署目标为小于8.4(7.x,8.0,8.1,8.2,8.3皆可)就同样不会有警告了。当然,有时候我们为了版本适配,也需要把部署目标调低一些。

   

 

1.【弹出提示对话框】

在iOS9之前我们使用AlertView来弹出对话框,现在推荐使用AlertController,对于这个变化,请参考我的另一篇博客《iOS9使用提示框的正确实现方式》。


2.【stringByAddingPercentEncodingWithAllowedCharacters替换stringByAddingPercentEscapesUsingEncoding

这个方法真的好长。。。我们使用这个方法来进行字符串编码方式的更改。最常用的地方就是进行Http网络请求的时候,发送的链接的参数中如果带有中文,那么首先就需要调用这个方法把编码方式改为utf8,因为服务器端一般都使用utf8编码。两者实现的功能一样。

//以下方法已经不推荐使用;
  //  NSString *urlStr = [@"http://v.juhe.cn/weather/index?format=2&cityname=北京&key=88e194ce72b455563c3bed01d5f967c5"stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 //建议使用这个方法stringByAddingPercentEncodingWithAllowedCharacters,不推荐使用stringByAddingPercentEscapesUsingEncoding;
  NSString *urlStr2 = [@"http://v.juhe.cn/weather/index?format=2&cityname=北京&key=88e194ce72b455563c3bed01d5f967c5" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];


3.【NSURLSession替换NSURLConnection】

NSURLSession已经渐渐走上历史舞台了。最近使用[NSURLConnection sendAsynchronousRequest]时已经警告为不推荐使用了,那我们就换成NSURLSession中的dataTaskWithRequest方法吧。

  //以下方法已经被弃用;
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
  
  [NSURLConnection
   sendAsynchronousRequest:urlRequest
   queue:queue
   completionHandler:^(NSURLResponse *response,
                       NSData *data,
                       NSError *error) {
     
     if ([data length] >0  &&
         error == nil){
       NSString *html = [[NSString alloc] initWithData:data
                                              encoding:NSUTF8StringEncoding];
       resault=[html copy];
       
       NSLog(@"返回的服务器数据 = %@", html);
     }
     else if ([data length] == 0 &&
              error == nil){
       NSLog(@"Nothing was downloaded.");
     }
     else if (error != nil){
       NSLog(@"发生错误 = %@", error);
     }
     
   }];

  //推荐使用这种请求方法;
  NSURLSession *session = [NSURLSession sharedSession];
  
  __block  NSString *result = @"";
  NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    
    if (!error) {
      //没有错误,返回正确;
      result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      NSLog(@"返回正确:%@",result);
      
    }else{
      //出现错误;
      NSLog(@"错误信息:%@",error);
    }
    
  }];
  
  
  [dataTask resume];


4.【presentViewController替换presentModalViewController】

这是弹出一个模态视图的方法,presentModalViewController方法首先在iOS6被弃用。如果使用了导航栏,则不能使用这种跳转方式。

  //以下方法被弃用;
  ThirdViewController *third = [[ThirdViewController alloc] init];
  [self presentModalViewController:third animated:true];

//推荐使用这种模态视图跳转;
  ThirdViewController *third = [[ThirdViewController alloc] init];
  [self presentViewController:third animated:true completion:nil];



5.【AlertController中的UIAlertControllerStyleActionSheet替换ActionSheet

ActionSheet在iOS8.3后被弃用了。会出现如下警告:


对于这个修改,请参考:《iOS开发——ActionSheet的使用与弹出选择对话框》这篇博客。



持续更新中。。。敬请关注!



最近开源的iOS应用,高仿印象笔记  https://github.com/chenyufeng1991/iOS-Oncenote 。欢迎大家点赞并关注项目进度。也可以安装到手机上试玩哦。

github主页:https://github.com/chenyufeng1991  。欢迎大家访问!



©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页