数据解析/网络编程/图片异步下载KVO/初级数据持久化

9.21——XML JSON数据结构解析

今天学习了XML解析

解析的概念

所谓解析,从事先规定好的格式中提取数据。

解析的前提:提前约定好格式,数据提供方按照格式提供数据,数据获取放则按照格式获取数据。

XML解析概念:Extensible Markup language 可货站标记语言。主流数据格式之一,可以用来存储和传输数据。


XMl数据 格式的功能

数据交换,内容管理,用作配置文件。

XML数据结构的语法

声明

节点使用一对标签表示。起始和结束标签。

根节点是起始节点,只有一个,节点可以嵌套。

节点可以有值,存储在一对儿标签中。


SAX解析

simple API for XML  基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)


NSXMLParser类

NSXMLParser是iOS自带的XML解析类。采用SAX方式解析数据。

解析过程有NSXMLParserDelegate协议方法回调。

解析过程:开始标签 取值 结束标签 取值


DOM解析

Document Object Model(文档对象模型)。

解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据。



JSON 数据结构

JSON数据结构的概念

JAvascript object notation 轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言。

JSON文档有两种结构:对象 数据

对象  以左大括号开始以右大括号结束,是名称/值对儿的集合。名称和值中间用分号隔开。多个名称/值对之间用逗号隔开。类似OC中的字典。

数组:以左中括号开始以右大括号结束,中间是数据。数据以逗号分隔。


JSON中的数据类型:字符串,数值,BOOL,对象,数组。


JSON数据结构

数据交换,内容管理,配置文件。

总结

数据解析:从某种格式的数据中提取自己所需要得数据。

主流的数据交换格式有两种:XML和JSON

XML解析分为两种:SAX解析和DOM解析

XML解析工具:NSXMLParser GDataXMLNode TouchXML 和KissXML 等

JSON解析工具:JSONkit NSJSONSerialization TouchJSON 和SBJSON等其中NSJSONSerialization是系统提供的解析类,其解析效率是最高的。


9.22——网络编程


今天学习了网络编程,知道了HTTP协议。

HTTP协议的概念

HTTP协议,Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

了解C/S模式

Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接受客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。


NSURL

url 统一资源定位符 也被称为网址 因特网标准的资源网址

URL的符语法:协议://授权/路径?查询

协议:ftp://(文件传输协议) http://(超文本传输协议)

https://(安全超文本传输协议) file://(本地文件协议)


请求方式

GET POST

两种请求方式比较

相同点:都能给服务器传输数据

不同点:

1.给服务器传输数据的方式:

GET:通过网址字符串。

POST:通过data

2.传输数据的大小

GET:网址字符串最多255字节

POST:使用NSData  容量超过1G

3.安全性

GET:所有传输服务器的数据,显示在网址里,类似于密码的明文数据,直接可见。

POST:数据被转成NSData(二进制数据)类似于密码的密文输入,无法直接读取。


连接方式

同步连接:程序容易出现卡死现象。

异步连接:等待数据返回。

异步链接有两种实现方式:

设置代理,接收数据。

实现Block



同步连接

+(NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse ()responseerror:(NSError *)error;

异步连接

设置NSURLConnection代理

实现相应的代理方法:开始相应接收数据、接收数据、成功、失败。

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

-(void)connectionDIdFinishiLoading:(NSURLConnection *)connection;

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;


异步链接(block)

+(void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void(^)(NSURLResponse *response,NSData * data,NSError *connectionError))handler;


NSURLResponse

根据网络请求协议,封装了服务器返回数据的部分信息。数据器相应网络请求后,返回数据的部分信息及数据本身。

NSHTTPURLResponse

NSURLResponse的子类,封装有关HTTP协议的响应信息。存储了HTTO协议的响应头信息,状态码。

如果网络请求时使用HTTP协议,NSURLResponse就是NSHTTOURLResponse


总结

GET请求方式和POST请求方式

同步,异步是连接当时

网络请求的步骤

1.NSURL 2.NSURLRequest 3. NSURLConnection  4.处理Error或者返回数据



9.23——图片异步下载、KVO

图片下载

真是开发中,网路接口返回的JSON或XML数据中,通常不会直接包含图片,而是给出图片的URL。

因此,需要根据图片URL获取图片数据,以便UI展示。


因为HTTP协议是超文本传输协议,所以可以传输图片。

图片下载与普通网络请求流程相同。

1.创建一个request

2.建立URLConnection

3.使用请求到的数据


ImageDownloader

图片下载是iOS开发中常用的功能,但系统并未踢动图片下载类。

为了便于后续使用,可以将图片下载封装到一个类里面(ImageDownloader)

ImageDownloader 允许外界指定URL 提供开始下载 和取消下载 功能。并提供Delegate或Block将图片传递给外界。


UITableVIew 异步下载图片。

多数App中,UITableView都会显示图片。

UItableView的重用机制,让我们能用很少的cell来呈现很多的内容(cell和model的数量不统一)

为了能正确显示图片,model 类应该提供图片获取功(model通过ImageDownloader下载图片,供cell使用)

UITableView显示图片

Model类注意事项

1、除了包含必要的数据外,还要还包含一个ImageDownloader对象,

2、包含一个Image

3、包含一个图片是否正在下载的BOOL值(用于判断是否需要开始下载)

Cell注意事项

根据Model信息,做页面显示。


KVO

KVO键值观察者,是观察者设计模式的一种具体实现,

KVO触发机制:一个对象(观察者),检测另一对象(被观察者)的某属性是否发生变化,若被监测属性发生的更改,会触发观察者的一个方法(方法名固定,类似代理方法)


KVO使用步骤

1.注册观察者(为观察者指定观察者以及被观察属性)

2.实现回调方法

3.触发回调方法(被观察属性发生更改)

4.移除观察者

KVO使用场景:MVC中M与C通信,M发生变化通知C,其中M是被观察者,C是观察者。

KVO注意事项:观察着销毁之前,移除观察者,否则会出现程序异常(给已经销毁的对象发送信息)


KVO检测Model图片下载

Cell图片及时显示

tableView:cellForRowAtIndexPath:会在重用的时候,根据Model显示Image或者placeholderImage。

如果tableview并未滑动,此时有图片下载完毕,是不是立即更新到Cell上的。

KVO监测Model属性

tableView:cellForRowAtIndexPath:中,为Model的Image属性添加观察者。

Image属性由nil变为非空的时候,视图控制器根据indexPath更新Cell显示。


总结:

ImageDownloader 封装了下载过程,提供了下载相关的方法。

KVO是观察者模式中的一种,当被观察者属性发生变化,会及时触发相关事件。

tableView可以将诶朱KVO监测下载,及时更新Cell、


9.24——初级数据持久化

什么是数据持久化?数据的永久存储。

为什么要做数据持久化:存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的,

数据持久化的本质:数据保存乘文件,存储到程序的沙盒中。


什么是沙盒机制

每个应用程序位于文件系统的严格限制部分

每个应用程序只能为该程序创建的文件系统中读取文件

每个应用程序在iOS系统内都放在了统一的文件夹目录下

沙盒的本质就是一个文件夹,名字是随机分配的。


沙盒路径的位置

通过fineder查找程序沙盒相对路径

~/Library/Application Support/iPhone Simulator

通过代码查找程序沙盒的相对路径

数据解析/网络编程/图片异步下载KVO/初级数据持久化_第1张图片



简单对象写入文件


数据解析/网络编程/图片异步下载KVO/初级数据持久化_第2张图片

数组

数据解析/网络编程/图片异步下载KVO/初级数据持久化_第3张图片

字典

数据解析/网络编程/图片异步下载KVO/初级数据持久化_第4张图片

复杂对象写入文件

一个Person类怎么样?

必须遵守NSCoding协议


数据解析/网络编程/图片异步下载KVO/初级数据持久化_第5张图片

写入对象

数据解析/网络编程/图片异步下载KVO/初级数据持久化_第6张图片

归档和反归档


复杂对象无法通过writeToFIle:方法进行数据持久化,只能问你个通过将复杂对象转换为NSData,通过writeToFile:进行数据持久化。

将复杂对象转换为NSData,通过归档,将NSData转换为复杂对象,通过反归档。


总结

沙盒机制

简单对象写入文件,只能是NSS热ing,NSArray,NSDictionary、NSData

复杂对象写入文件,遵守NSCoding协议,实现代理方法。



几个数据持久化的方式

数据解析/网络编程/图片异步下载KVO/初级数据持久化_第7张图片

你可能感兴趣的:(UI学习)