网络阶段#
应用程序如何连接网络##
1.基于HTTP协议
- HTTP:超文本传输协议(Hyper-Text Markup Language),基于字符的无状态协议,有请求和响应两种格式,底层是TCP,这就意味着他是一个可靠的协议。
TCP/IP模型是internet的基石,是一个分层模型,从下到上依次是物理链路层、网络层(寻址和路由)、传输层(TCP/UDP,前者是可靠通信协议,后者是不可靠通信协议)、应用层(HTT/FTP/SMTP/Telent)。
- iOS应用相关API:
- NSURL:统一资源定位符,协议://域名或者IP地址:端口号/路径/资源
- NSURLREquest/NSMutableURLREquest:代表HTTP请求
- NSURLconnectiion:ios7以前的联网主要有两个方法,一个用于发送同步请求(阻塞时请求),一个发送异步请求(非阻塞时请求)。
- NSURLResponse:HTTP响应(服务器给应用的响应)
- NSURLSession:通过该对象可以创建三种任务:上传( NSURLSessionUploadTask)、下载( NSURLSessionDownladTask) 、获取数据(NSURLSessionDatadTask),任务可以执行(resume)、挂起(suspend)、取消(cancel)。
- NSURLSessionConfiguration:(保存联网的设置)
io9基于安全考虑,不允许使用非安全的的HTTP协议联网,需要修改项目的info.plist文件设置允许使用非安全的HTTP连接。
- 数据解析:
- JSON:NSJSONSerialization 可以将服务器中的二进制数数据形式的数据转换成字典,接下来就可以将字典或数组转换成模型对象,可以使用方式包括:KVC、JSONkKit、JSONModel、 MJExexternsion、YYModel(推荐使用)
- XML:SAX(顺序的、事件驱动式解析,节省空间 )解析和DOM解析(文档对象模型,方便查找[XPath/Query])。第三方库的解析基本上都是DOM解析,比较常用的有:GDataXML、KissXML、RaptureXML。
- 第三方库的使用:
- AFURLSessionmanager
- AFHTTPSessionmanager
注意:AFNetworking默认只支持JSON格式的数据,需要对 AFHTTPResponseSerializer来设置支持更多的MINME类型。
2.基于套接字
- 点到点的通信
- 和服务器通信
是一套联网的API,是由一系列的c函数构成的,有三类套接字:流套接字(基于TCP协议)、数据套接字(基于UDP协议)、原始套接字(基于IP协议
地图和定位##
- 苹果原生地图、高德地图(火星坐标)、百度地图(熊掌坐标)。
- 定位:如果使用CLLoctionManager实现定位服务,通过GPS定位获得坐标是地球坐标,在国内使用时需要转换为火星坐标,百度地图和高德地图都对CLLoctionManager做了封装,提供了自己的定位API,通过百度和和高德定位服务获取坐标已经是修正后的火星坐标或者熊掌坐标,就不用通过代码进行坐标转换。iOS8以后必须用户授权,因此需要修改info.plist文件,设置一直开启或者使用时开启定位服务选项。
- 在地图上添加图形覆盖物和标注
- poi搜索功能
- 街景功能、室内地图
- 计算距离:球面坐标到平面坐标的转换
多线程编程##
- 进程、线程;串行和并行;同步和异步
- 五种实现方案:
- ptherads
- NSObject
- 扩展:preformSelectorBackground/preformSelectorOnMAINThread
- NSThread
- NSOperationQueue / NSOperation(NSInnvocationOperation/NSBlockOperation)
- GCD的使用场景
dispatch_async(dispatch_get_global_queue(0,0),^{
//执行操作
dispatch_async(dispatch_get_main_queue(),^{
// 刷新界面
});
});
嵌入式数据库##
- 实现数据持久化,有效的管理数据。
- SQLite,关系型数据库,用二维表组织数据,支持SQL。
- DDL:create、drop、alter
- DML:insert、delete、update
- DQL:select
- 投影、别名、筛选、去重、分组、聚合函数、子查询、连接查询
- ER图:实体和实体之间的关系,分别是一对一、一对多、多对多。
- 设计表:范式理论、1NF 、2NF 、3NF 、BCNF、 NF。
- 应用程序需要将数据库放在沙盒中
- 第三方库FMDB
- FMDatabace:
- FMResult:
- 设计专门的持久层
- DAO模式:Data Access Object (CRUD)封装增删改查的编程接口,以单位来组织数据。