//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
2. 网络连接方法介绍
================================================================================
1> NSURL
// 要访问的资源路径,NSURL封装了内部方法,可以方便访问URL使用的协议,主机,路径以及参数等信息
NSURL *url = [NSURL URLWithString:@"http://localhost/videos.josn"];
2> 请求
/**
参数:
1. url 要访问的资源路径
2. cachePolicy 缓存策略
NSURLRequestUseProtocolCachePolicy = 0, 默认缓存策略
NSURLRequestReloadIgnoringLocalCacheData = 1, 忽略本地缓存,始终从服务器加载数据,用于对数据及时性要求比较高的网络访问
例如:股票、彩票等
NSURLRequestReturnCacheDataElseLoad = 2, 如果有缓存则加载缓存,否则从网络加载数据
NSURLRequestReturnCacheDataDontLoad = 3, 如果有缓存就使用缓存,不从服务器加载
3. timeoutInterval 超时时长,默认60.0秒,建议20~30秒
SDWebImage的默认超时时长是15秒
*/
3> 异步方法 - 所有网络操作都要使用异步方法
/**
参数
1. request: 发送给服务器的请求
2. queue: 表示网络访问结束后,执行回调方法所在的队列
* 如果不需要对返回数据做复杂的处理,可以直接使用主队列
* 如果需要对返回数据做复杂处理,例如解压缩等耗时操作,可以新建一个队列
3. completionHandler: 回调方法
1> response: 服务器的响应
2> data: 服务器返回的数据实体
3> connectionError: 网络连接错误(服务器不能访问或者返回空数据)
*/
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 提示,一定注意要检测返回的数据是否为 null
if (connectionError != nil || data == nil) {
NSLog(@"%@", connectionError.description);
return;
}
NSLog(@"%@", data);
}];
4> 同步方法
/**
参数:
1. request: 发送给服务器的请求
2. &response: 服务器响应对象的地址
3. &error: 网络访问错误地址(服务器不能访问或者返回空数据)
在 OC 开发中,看到 ** 就传递对象地址
指针的指针通常在C语言中,用于一个函数返回多个参数使用的技巧
*/
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
NSLog(@"%@ %@", data, response);
NULL 空地址,0
nil 地址指向NULL的空对象
3. JSON数据解析
================================================================================
1> 序列化 & 反序列化 概念介绍
2> JSON 反序列化
/**
NSJSONReadingMutableContainers 父节点可变
NSJSONReadingMutableLeaves 叶子节点可变
NSJSONReadingAllowFragments 允许父节点不是 NSDictionary 或者 NSArray
提示:在OC中如果枚举类型是位移的,通常传人 0,表示什么附加操作也不做,效率最高!
*/
id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
3> Log分类简单介绍
4> 与归档的对比
知识点回顾:归档
/** 将对象保存至磁盘之前,将对象进行编码,所谓编码就是将对象转换成二进制数据 */
- (void)encodeWithCoder:(NSCoder *)encoder
/** 从磁盘加载对象的二进制数据后,需要对数据进行解码,所谓解码就是将二进制数据转换成对象 */
- (instancetype)initWithCoder:(NSCoder *)decoder
4. JSONKit(知道就行)
================================================================================
参见 03-JSONKit笔记
5. PList反序列化
================================================================================
/**
NSPropertyListImmutable = 0, 不可变
NSPropertyListMutableContainers = 1, 容器可变
NSPropertyListMutableContainersAndLeaves = 2 容器及子节点可变
*/
id result = [NSPropertyListSerialization propertyListWithData:data options:0 format:NULL error:NULL];
6. XML反序列化
================================================================================
1> 基本概念
XML 可扩展标记语言,XML的格式与HTML类似,也是以<标记></标记>格式展现,我们熟悉的Plist就是一种特殊格式的XML
* XML是专门设计用来表示数据的
* HTML是专门设计用来展现页面的
2> 解析原理简介
3> XMLParser的代理方法
#pragma mark - XML解析方法
// 1. 开始解析
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"开始解析");
}
// 2. 开始节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"开始节点:%@ %@", elementName, attributeDict);
}
// 3. 发现文字,需要做拼接处理
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"发现文字 %@", string);
}
// 4. 结束节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"结束节点:%@", elementName);
}
// 5. 结束文档
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"结束解析");
}
// 6. 解析错误
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
NSLog(@"解析错误");
}
4> 使用 GDataXML-HTML 框架实现文档解析
https://github.com/graetzer/GDataXML-HTML
# 每一对 <标记></标记> 都可以看成一个 GDataXMLElement
# 使用 - (NSArray *)attributes; 可以获得属性字典数组
属性数组中保存的对象同样是 GDataXMLElement
# 通过 - (NSString *)name; 可以获得节点名称
# 通过 - (NSString *)stringValue; 可以获得节点字符串内容