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. PHP中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR使用详解

    1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 3.HTTP_CLIENT_IP:客户端的ip 在PHP ...

  2. Minimum Transport Cost Floyd 输出最短路

    These are N cities in Spring country. Between each pair of cities there may be one transportation tr ...

  3. POJ 1861 Network (Kruskal求MST模板题)

    Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14103   Accepted: 5528   Specia ...

  4. Cocos2d-x3.3RC0载入Android的WebView

    代码部分摘自http://www.fusijie.com/blog/2013/12/26/play-cocos2dx-33/ Cocos2d-x3.3RC0通过Jni嵌入Android的WebView ...

  5. Android数据存储之IO

    Android开发中免不了数据本地的存储,今天我们来说一说怎样利用IO流来进行数据存储. 这里我们通过模拟一个QQ登陆界面的小demo来实际操作IO流. 功能描写叙述:点击button能够保存用户输入 ...

  6. java基础--自我总结

    1.带小数点数字默认为double类型,double范围比float大,为了不损失精度,double类型不会自动转换成float类型: 例:float f = 1.0f      //必须这么写 2. ...

  7. _stdcall与_cdecl

    _cdecl(C Declaration的缩写)是C/C++和MFC程序默认使用的调用约定,因此可以省略,也可以在函数声明时加上_cdecl关键字来手工指定.采用_cdecl约定时,函数参数按照从右到 ...

  8. 1250 Fibonacci数列

    1250 Fibonacci数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 定义:f ...

  9. [Python] partial改变方法默认參数

    Python 标准库中 functools库中有非常多对方法非常有有操作的封装,partial Objects就是当中之中的一个,他是对方法參数默认值的改动. 以下就看下简单的应用測试. #!/usr ...

  10. TeX中的引号

    #include <stdio.h> #include <math.h> // 算法竞赛的目标是编程对任意输入均得到正确的结果. // 请先独立完成,如果有困难可以翻阅本书代码 ...