网络理解##
1.因为网络是需要考虑超时时长的,是耗时操作,所有需要用线程处理.
-
NSURL *url = [NSURL urlWithString:@"https://baidu.com"];//通过一个标识符标识网络
NSURLRequest *request = [NSURLRequest requestWithURL:url];//创建一个网络请求.//网络请求数据一般用异步请求,加入主队列,在主线程执行.主线程一般用于UI更新.
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *_Nullable response,NSData *_Nullable data, NSError *_Nullable connectionError) {
//判断是否连接错误,最好打印一下,返回错误原因.
if(connectionError){
NSLog(@"连接错误%@",connectionError);
return;
}
//创建服务器响应
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//判断状态码,状态码正确,才可以接受数据实体,因为服务器响应会返回状态码和数据实体.
if(httpResponse.statuesCode == 200||httpResponse.statuesCode == 304) {
//JSON是一种特殊的字符串.可能是字典,可能是数组
//解析数据JSON形式的字符串转换成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遍历优点:
1)遍历可以从block中直接获取需要的所有信息,包括下标,值等.特别是字典,不需要多余代码就可以获得key,value的值.
2)能够直接修改block中key或者obj的类型为真实类型,可以省去类型转换的工作.
3)可以通过NSEnumerationConcurrent枚举值开启并发迭代功能.</font>