網(wǎng)絡(luò)理解##
1.因為網(wǎng)絡(luò)是需要考慮超時時長的,是耗時操作,所有需要用線程處理.
-
NSURL *url = [NSURL urlWithString:@"https://baidu.com"];//通過一個標(biāo)識符標(biāo)識網(wǎng)絡(luò)
NSURLRequest *request = [NSURLRequest requestWithURL:url];//創(chuàng)建一個網(wǎng)絡(luò)請求.//網(wǎng)絡(luò)請求數(shù)據(jù)一般用異步請求,加入主隊列,在主線程執(zhí)行.主線程一般用于UI更新.
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *_Nullable response,NSData *_Nullable data, NSError *_Nullable connectionError) {
//判斷是否連接錯誤,最好打印一下,返回錯誤原因.
if(connectionError){
NSLog(@"連接錯誤%@",connectionError);
return;
}
//創(chuàng)建服務(wù)器響應(yīng)
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//判斷狀態(tài)碼,狀態(tài)碼正確,才可以接受數(shù)據(jù)實體,因為服務(wù)器響應(yīng)會返回狀態(tài)碼和數(shù)據(jù)實體.
if(httpResponse.statuesCode == 200||httpResponse.statuesCode == 304) {
//JSON是一種特殊的字符串.可能是字典,可能是數(shù)組
//解析數(shù)據(jù)JSON形式的字符串轉(zhuǎn)換成OC對象.
//這里用蘋果自帶的JSON解析,高效.
NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:10]; //capacity:容納量.
//反向遍歷--降序遍歷
[array enumerateObjectsUsingBlock:^(id _Nonnull obj,NSUInteger idx,BOOL *_Nonnull stop){
QYNews *news = [QYNews newsWithDict:obj];
[mArray addObject:news];
}];
<font color=green>//Block遍歷優(yōu)點:
1)遍歷可以從block中直接獲取需要的所有信息,包括下標(biāo),值等.特別是字典,不需要多余代碼就可以獲得key,value的值.
2)能夠直接修改block中key或者obj的類型為真實類型,可以省去類型轉(zhuǎn)換的工作.
3)可以通過NSEnumerationConcurrent枚舉值開啟并發(fā)迭代功能.</font>