iOS平台在快速的發展,各種接口正在不斷的更新。隨著iOS9的發布,又有一批老方法不推薦使用了,你若調用這些方法,運行的結果是沒有問題的,但是會出現警告“***is deprecated :first deprecated in iOS 9.0 - Use *******”.就像如圖所示:
在實際項目開發中,我們要秉承一個信念就是:要把每一個警告當做錯誤來處理,並解決每一個警告。你想想,你運行一個項目,就算運行成功了,但是出現幾十個、甚至幾百個黃黃的警告,心情是不是很糟糕呢?我將在這篇博客結合我的開發經驗,羅列出iOS9中不推薦使用的方法,並換成蘋果最新推薦的方式。本篇博客將會持續更新。
1.【彈出提示對話框】
在iOS9之前我們使用AlertView來彈出對話框,現在推薦使用AlertController,對於這個變化,請參考我的另一篇博客《iOS9使用提示框的正確實現方式》。
2.【stringByAddingPercentEncodingWithAllowedCharacters替換stringByAddingPercentEscapesUsingEncoding】
這個方法真的好長。。。我們使用這個方法來進行字符串編碼方式的更改。最常用的地方就是進行Http網絡請求的時候,發送的鏈接的參數中如果帶有中文,那麼首先就需要調用這個方法把編碼方式改為utf8,因為服務器端一般都使用utf8編碼。兩者實現的功能一樣。
//以下方法已經不推薦使用; // NSString *urlStr = [@http://v.juhe.cn/weather/index?format=2&cityname=北京&key=88e194ce72b455563c3bed01d5f967c5stringByAddingPercentEscapesUsingEncoding: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];