自從ios7之后,蘋果推薦使用NSURLSession,棄用NSURLConnection。作為一個初學者,當然是奔著最新的技術(shù)去學習,下面就講一下一個初學者對NSURLSession的使用心得。有什么不對的地方,請各路大神指出更正,勿噴,勿噴。
那么,現(xiàn)在就讓我開始吧?。?!
NSURLSession有三種功能:加載數(shù)據(jù),上傳,下載。
今天就講一講NSURLSession怎么加載數(shù)據(jù),并且將加載的json數(shù)據(jù),解析。
閑話少說,現(xiàn)貼出來代碼
+(void)getData:(NewsTableView *)table block_id:(NSString*)block_id position:(NSString*)cellPosition num:(NSString*)num{
//如果需要參數(shù),直接用轉(zhuǎn)義字符加就好了
NSString *sURL = [NSString stringWithFormat:@"這里寫你的URL"];
NSURL* url = [NSURL URLWithString:sURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];//在這里更改GET,POST請求
[request setTimeoutInterval:120.0];//設置超時時長
NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession* session = [NSURLSession sessionWithConfiguration:config];
NSURLSessionTask* task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error == nil) {
//數(shù)據(jù)獲取成功,在這里進行對獲取到的數(shù)據(jù)data進行處理
NSArray* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
for (NSString* str in jsonArray) {
//再次解析
NSData* da = [str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:da options:NSJSONReadingMutableContainers error:&error];
NewsInfo* news = [NewsInfo initFromDict:dict];
[table.newsArray addObject:news];
}
}else{
NSLog(@" %@",error);
}
//由于獲取數(shù)據(jù)內(nèi)容會在ui界面初始化后執(zhí)行,所以需要重新加載tableview的數(shù)據(jù)
dispatch_async(dispatch_get_main_queue(), ^{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[table.tableView reloadData];
});
}];
[task resume];//恢復任務,切記不能忘
}
通過NSURLSession獲取數(shù)據(jù)的基本套路就是
- 先要給出一個URL地址
- 通過這個地址構(gòu)建以個request請求
- 給出NSURLSession的配置config
- 通過config初始化一個Session
- 通過Session和request 初始化 task請求
NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
- defaultSessionConfiguration: 默認配置,使用硬盤來存儲緩存數(shù)據(jù)。
- backgroundSessionConfiguration: 后臺session配置,與默認配置類似,不同的是會在后臺開啟另一個線程來處理網(wǎng)絡數(shù)據(jù)。
- ephemeralSessionConfiguration: 臨時session配置,與默認配置相比,這個配置不會將緩存、cookie等存在本地,只會存在內(nèi)存里,所以當程序退出時,所有的數(shù)據(jù)都會消失。
NSJSONSerialization
NSJSONSerialization 蘋果自帶的json解析。
主要通過這個方法來獲取解析
[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
- NSJSONReadingMutableContainers 返回可變?nèi)萜?/li>
- NSJSONReadingMutableLeaves:返回的JSON對象中字符串的值為NSMutableString
- NSJSONReadingAllowFragments:允許JSON字符串最外層既不是NSArray也不是NSDictionary,但必須是有效的JSON Fragment。
一般情況下,我們返回的都是數(shù)組或者字典。
返回的如果是‘[’ ‘]’ 一般是解析成數(shù)組
返回 的如果是‘{’ ‘}’ 一般是解析成字典
使用NSJSONSerialization的過程中,如果遇到直接輸出解析出來的字典,發(fā)現(xiàn)中文是亂碼這種情況,不必慌張,直接按鍵取值就不會是亂碼了,想當初,小弟我為了轉(zhuǎn)碼花費了不少時間....
以上,基本就是我對NSURLSession的使用心得,希望對初學者有所幫助,大家一起努力吧...