1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

1、 同步GET请求

  1. //第一步,创建URL
  2. NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
  3. //第二步,通过URL创建网络请求
  4. NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
  5. //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
  6. 其中缓存协议是个枚举类型包含:
  7. NSURLRequestUseProtocolCachePolicy(基础策略)
  8. NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
  9. NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
  10. NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
  11. NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
  12. NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
  13. //第三步,连接服务器
  14. NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
  15. NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
  16. NSLog(@"%@",str);

复制代码

2、同步POST请求

  1. //第一步,创建URL
  2. NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
  3. //第二步,创建请求
  4. NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
  5. [request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
  6. NSString *str = @"type=focus-c";//设置参数
  7. NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
  8. [request setHTTPBody:data];
  9. //第三步,连接服务器
  10. NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
  11. NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
  12. NSLog(@"%@",str1);

复制代码

3、异步GET请求

  1. //第一步,创建url
  2. NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
  3. //第二步,创建请求
  4. NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
  5. //第三步,连接服务器
  6. NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

复制代码

4、异步POST请求

  1. //第一步,创建url
  2. NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
  3. //第二步,创建请求
  4. NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
  5. [request setHTTPMethod:@"POST"];
  6. NSString *str = @"type=focus-c";
  7. NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
  8. [request setHTTPBody:data];
  9. //第三步,连接服务器
  10. NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

复制代码

5、异步请求的代理方法

  1. //接收到服务器回应的时候调用此方法
  2. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
  3. {
  4. NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
  5. NSLog(@"%@",[res allHeaderFields]);
  6. self.receiveData = [NSMutableData data];
  7. }
  8. //接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
  9. -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
  10. {
  11. [self.receiveData appendData:data];
  12. }
  13. //数据传完之后调用此方法
  14. -(void)connectionDidFinishLoading:(NSURLConnection *)connection
  15. {
  16. NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
  17. NSLog(@"%@",receiveStr);
  18. }
  19. //网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
  20. -(void)connection:(NSURLConnection *)connection
  21. didFailWithError:(NSError *)error
  22. {
  23. NSLog(@"%@",[error localizedDescription]);
  24. }

复制代码

推荐一家即时通讯云开源项目:yun2winwww.yun2win.com

iOS开发中如何实现同步、异步、GET、POST等请求实操演示!的更多相关文章

  1. 多线程在iOS开发中的应用

    多线程基本概念 01 进程 进程是指在系统中正在运行的一个应用程序.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 02 线程 2-1 基本概念 1个进程要想执行任务,必须得有线程 ...

  2. iOS开发——高级篇——线程同步、线程依赖、线程组

    前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查 ...

  3. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  4. 深入理解 iOS 开发中的锁

    来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...

  5. iOS开发中的MVC设计模式

    我们今天谈谈cocoa程序设计中的 模型-视图-控制器(MVC)范型.我们将从两大方面来讨论MVC: 什么是MVC? M.V.C之间的交流方式是什么样子的? 理解了MVC的概念,对cocoa程序开发是 ...

  6. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  7. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  8. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  9. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

随机推荐

  1. codevs4419 FFF 团卧底的菊花

    题目描述 Description FFF 团卧底在这次出题后就知道他的菊花可能有巨大的危险,于是他提前摆布好了菊花阵,现在菊花阵里有若干朵菊花,出现次数最多的那一朵就是出题人的,你的任务是需要找出出题 ...

  2. CodeForces 370C

    这道题其实是挺简单的.首先很容易发现最多人用的颜色的人数如果大于n/2,就肯定不能让全部人都成功戴上两只不同颜色的手套.反过来想,如果这个人数小于等于n/2又如何呢?的确,这就能让全部人都能戴上两只不 ...

  3. nyoj_68_三点顺序_201404152013

    三点顺序 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆 ...

  4. 几道splay

    hdu 1890 题意:每次将第i位到第i小数字所在的位置之间的位置翻转,每次输出第i小数字所在的位置 分析: 简单的splay处理区间翻转问题 有三点需要注意: 1.区间是1~n+2 2.此题里的查 ...

  5. SQL Server 性能优化实战系列(文章索引) : 桦仔

    http://www.cnblogs.com/gaizai/archive/2012/01/20/2327814.html

  6. java 中public 类

    java 中的文件名是以这个文件里面的public 的那个类命名的(也就是说文件名和这个文件里面的那个public 属性的class 名称一样), 同一个文件中不能放多个(超过2个)的pulic 类. ...

  7. 【oracle11g,18】存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表

    一. 暂时表 暂时表放在暂时表空间,不生成redo,仅仅有undo. 在暂时表中能够创建索引.视图及触发器,还能够使用"Export and Import(导出和导入)"或&quo ...

  8. linux /proc/stat 文件说明

    /proc/stat 文件内容 # cat /proc/stat cpu 1411 1322 3070 1193539 2790 0 268 0 0 0 cpu0 472 658 787 297933 ...

  9. LeetCode 168. Excel Sheet Column Title (Excel 表格列名称)

    Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...

  10. git reset --hard 回滚以后 以后怎么再回去?

    恢复的过程很简单: 通过git log -g命令来找到需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别,找到执行reset --hard之前的那个commit对应的commitid ...