iOS---网络基础一
来源:互联网 发布:samba的端口号 编辑:程序博客网 时间:2024/06/02 00:37
一、访问网络的方式
1、同步请求:数据的请求过程是在主线程来执行的。网络数据加载需要一个时间过程,这样的话就会堵塞主线程。
2、异步请求:数据的请求过程在多线程来执行。
3、同步请求无法取消,异步请求过程中可以取消。同步请求无法监听加载进度,异步可以监听。
二、访问网络的基本流程
等待网络处理中……
5、接受返回数据
三、向HTTP服务器发送请求
1,get 所有参数接接在URL后面,路径如果包含了中文等字符,需要进行转码
转码的代码
string=[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
2,POST
参数不拼接在URL后面 ,
参数放在请求体里面(body),参数包含了中文,还是需要转码
四、 异步\同步请求
sendSynchronousRequest:requestreturningResponse:&responseerror:&error
NSMutableURLRequest*request = [selfpostLoginRequest];
NSError*error;
NSURLResponse*response;
NSData*data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:&responseerror:&error];
//注意,只有同步请求结束之后,才会执行后续操作,修改LOGIN_URL可以看到效果
if (!data){
NSLog(@"同步访问错误:%@", error.localizedDescription);
} else {
// 解码数据
NSString *string= [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"同步返回内容:%@",string);
}sendAsynchronousRequest:requestqueue:[NSOperationQueuemainQueue]completionHandler:^(NSURLResponse*response,NSData*data,NSError*error)
NSMutableURLRequest*request = [selfpostLoginRequest];
// 注意此处使用了块代码!异步请求队列使用的是操作队列的主队列
[NSURLConnectionsendAsynchronousRequest:requestqueue:[NSOperationQueuemainQueue] completionHandler:^(NSURLResponse*response,NSData*data,NSError*error) {
if([data length]> 0&& error == nil) {
// 解码数据
NSString *string= [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"异步返回内容:%@",string);
} else if([data length]<= 0&& error == nil) {
NSLog(@"没有接收到返回数据");
} else {
NSLog(@"异步访问错误:%@", error.localizedDescription);
}
}];
五、用设置代理的方法
默认就是代理方法
NSURLConnection *conn=[NSURLConnection connectionWithRequest:<#(NSURLRequest *)#> delegate:self];
[connstart];
实现代理方法:接收服务器返回的数据,并且解析数据
1,接收到服务器的响应,服务器要传数据,客户端做接收准备
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
2接收到服务器的数据时就会调用 一次,(能会调用多次);
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
3 请求结束(数据完毕)就会调用,做后续处理
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
4服务器请求失败,原因很多。
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
5向服务器发送数据,此方法仅适用于POST,尤其文件文件
(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
六、缓存策略
NSURLRequest *re=[NSURLRequest requestWithURL:<#(NSURL *)#> cachePolicy:<#(NSURLRequestCachePolicy)#> timeoutInterval:<#(NSTimeInterval)#>]
定义request
- iOS---网络基础一
- iOS 网络高级编程一:越是基础越是高级
- iOS 网络 - 01-网络基础
- ios网络开发基础
- iOS的网络基础
- iOS 网络编程基础
- iOS网络基础
- iOS基础:网络相关
- iOS网络操作基础
- 网络篇一---网络基础
- 网络基础(一)
- 一、网络基础
- 网络基础<一>
- 网络编程基础一
- 网络编程基础一
- 网络基础(一)
- 网络取证基础一
- 网络基础(一)
- .java转.exe
- 微软2014实习生及秋令营技术类职位在线测试 K-th string
- Bootstrap的自学案例~ (已放在新浪云端
- 学徒浅析Android开发:第二讲——ListView和GridView的应用
- PAT 1007. 素数对猜想 (20)
- iOS---网络基础一
- 【置顶】【从0开始学树莓派】序列之8 网线下疯狂的树莓派
- bat文件小尝试
- malloc和new的区别是什么?
- poj_2109 二分+大整数乘法
- leetcode: Scramble String
- 用Python模拟登录正方教务系统并抓取初始网页的一些个人笔记
- Struts2返回success不能跳转的问题
- 算法学习十一----连续最长的数字串