移动应用一般由用户界面、用户体验、动态数据构成。
- 用户界面由UI设计
- 用户体验由多线程来完成
- 动态数据由网络编程来实现
在网络编程中主要有这么两个角色
- 客户端:移动应用
- 服务器端:为客户端提供服务、数据和资源的机器
步骤:
1.客户端向服务器发送请求,目的是索要资源
2.服务器会从数据库中寻找资源
3.服务器对客户端的请求进行响应,返回其所需资源
服务器
按照软件开发阶段,分为两种
远程服务器
- 别名:外网服务器、正式服务器
- 使用阶段:应用上线后使用的服务器
- 使用人群:所有用户
- 速度:取决于服务器性能和用户网速
本地服务器
- 别名:内网服务器、测试服务器
- 使用阶段:应用处于开发、测试阶段
- 使用人群:开发人员、测试人员
- 速度:由于是局域网、速度飞快,有助于提高开发测试效率
HTTP协议
以前一直搞不懂这个协议是什么鬼,感觉是一种高深莫测的东西。其实,协议就是用于规定两个事物之间沟通方式的一些规则。这个HTTP协议就是规定了客户端和服务器端之间的数据传输格式。
HTTP协议的特点
- 简单快速
因为http协议简单,所以http服务器程序规模小,通信速度很快 - 灵活
http协议允许传输任意类型的数据 - http0.9和1.0使用非持续连接
每次连接之处里一个请求,服务器对客户端作出响应之后就断开连接,节省传输时间
iOS中发送http请求的方法
- NSURLConnection:用法简单,最古老经典的方案
- NSURLSession:iOS7新出的技术,功能比NSURLConnection更强大
- CFNetwork:前两种当法的底层实现,纯C语言的
第三方框架
- ASIHttpRequest:功能非常强大,但是已经不再更新了
- AFNetworking:简单易用,提供了基本的常用功能,维护和使用的人较多
常用类
- NSURL:请求地址
- NSURLRequest:代表一个请求,包含一个NSURL对象、请求头、请求体、请求超时
- NSURLConnection 负责发送请求,建立客户端与服务器端的连接,发送NSURLRequest的数据给服务器并收集来自服务器的响应数据
同步和异步请求
同步请求
[NSURLConnection sendSynchronousRequest:returningResponse:error:]在当前线程中发送请求,所以不要在主线程中使用此方法,该函数返回NSData对象,也就是说只有等到返回了数据,才结束这个方法,否则就一直卡在这个方法上
异步请求
block回调
+ (void)sendAsynchronousRequest:(NSURLRequest )request queue:(NSOperationQueue )queue completionHandler:(void (^)(NSURLResponse * response, NSData *data,NSError *connectionError)) handler;
会在请求完毕时自动调用。这个地方需要注意一点,发送该请求在子线程中执行,如果要在block回调中更新UI,那么需要将queue参数设置为主队列,这个时候不要弄混了,这个主队列是说明block里面的内容在主队列中执行,但是发送请求仍在子线程执行。