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. }

复制代码

推荐一家即时通讯云开源项目:yun2win:www.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. 测试出来了第一版代码--可以得到用户token啦

    一版一版往前走啦... 先安装vs2010的学习版, 然后用codeblock来搞. 有一个msvcr100.dll这个文件需要和代码同级目录. 这样的好处是合规,然后,codeblock也可以用vs ...

  2. - > 贪心基础入门讲解三——活动安排问题二

    有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室?   分析:能否按照之一问题的解法,每个教室安排尽可能多的活动,即按结束时间排序,再贪心选 ...

  3. Maven安装好后包下载的测试命令和配置变量的查看命令:mvn help:system

    mvn help:system 该命令会打印出所有的Java系统属性和环境变量,这些信息对我们日常的编程工作很有帮助.运行这条命令的目的是为了让Maven执行一个真正的任务.我们可以从命令行输出看到M ...

  4. python基础学习之02 序列

    #encoding=utf-8 import math a=[1,23,4,5,6] print a a[1:1]=[2,3,5] print a a a[1]='a' print a a[1]={1 ...

  5. 我的CSDN博客停止更新通告

    我的CSDN博客停止更新通告 自从2001年在CSDN发表第一篇博客開始,至今天(2014年6月11日)为止,算起来我己经在CSDN博客上"呆"了13年.共发表251篇原创文章,有 ...

  6. 使用NDIS驱动监測以太网络活动

    转载自: http://blog.csdn.net/ddtpower/article/details/656687   本论文提供了NDIS的主要的理解,应用程序怎样与驱动程序交互.发挥驱动程序最佳性 ...

  7. 线段树专题 POJ3468 A Simple Problem with Integers

    题意:n个点.m个操作.两种操作类型.C X Y K 表示区间[x,y]上每一个点值加k.Q X Y 求区间[x,y]的和 分析:线段树区间求和,裸模板 注意:结果会超int,要用long long ...

  8. Android开发之使用sqlite3工具操作数据库的两种方式

    使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...

  9. oc74--NSMutableArray

    // // main.m // NSMutableArray ,可变数组 #import <Foundation/Foundation.h> int main(int argc, cons ...

  10. 手把手教你把Vim改装成一个IDE编程环境(图文)【转】

    本文转载自: http://blog.csdn.net/wooin/article/details/1858917