在学习ios的过程中,停留在UI控件很长时间,现在正在逐步的接触当中!!!!!!在这个过程中,小编学到了一些关于网络编程知识,并且有感而发,在此分享一下:

关于网络请求的重要性我想不用多说了吧!!!对于移动客户端来说,网络的重要性不言而喻,常见的网络请求有GET, POST,今天来看一下两种网络请求的实现方式。

第一部分   小编的理解

一、两种网络请求--POST请求与GET请求的异同(这里小编只讨论的是异步链接)

GET的语义是获取指定URL上的资源,将数据按照Variable = Value的形式,添加到action所指向的URL后面,并且两者使用"?"连接,各个变量之间使用"&"连接。

POST的语法是指定资源“追加/添加”资源,将数据放在数据体上,按照变量和值相对应的方式,传递到action所指向的URL。

1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? 来间隔。POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求的一部分,提交后台服务器。

2. GET请求参数会出现在接口中,不安全;而POST请求相对安全,所有数据对用户不可见。

3.GET传输的数据量小,主要受URL长度限制;而POST可大量传输数据,上传文件只能使用POST。

4.虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据,POST多用于向后台提交数据。

二、 网络请求的步骤
 1. 确定地址NSURL
 2. 建立请求NSURLRequest
 3. 建立并启动连接NSURLConnection
     等待网络处理~~~~
 4. 通过代理方法处理网络请求
    遵守协议:NSURLConnectionDataDelegate

三、 网络代理方法
 1. 接收到服务器的响应,服务器要传数据,客户端做接收准备
 2. 接收服务器传输的数据,可能会多次执行
 3. 接收数据完成,做后续处理
 4. 服务器请求失败,原因很多(网络环境等等)
 5. 向服务器发送数据,此方法仅适用于POST,尤其上传文件

四、 GET方法
    在NSURL中,指定参数(如果有,也可以不指定参数),例如:http://www.baidu.com

五、 POST方法
    定义一个可变的URLMutableRequest
    1) 时长
        [request setTimeoutInterval:2.0f];
    2) 请求方式(默认是GET)
        [request setHTTPMethod:@"POST"];
    3)  数据体
        NSData *body = [string dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
 
 六、 同步方法——必须要某个网络请求完成后,才能后续执行,例如网银登录
    看到方法参数中包含__autoreleasing字样,在定义的对象名前面加上“&”
    NSURLResponse *response = nil;
    NSError *error = nil;
    // 同步操作没有完成,后面的代码不会执行
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    1> 接收到数据,表示工作正常
    2> 没有接收到数据,但是error为nil,表示接收到空数据
       通常服务器没有对该请求做任何响应
    3> error不为空,表示请求出错

七、 异步方法
     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *reponse, NSData *data, NSError *error) {
 
        // 请求完成后的处理
     }];
 
    异步方法不用等待网络请求结束

第二部分   小编的部分demo

 // 1. 确定地址NSURL
NSString *urlString = [NSString stringWithFormat:@"http://XXXXXXX.php?XXXX=%@&XXXX=%@", XXX, XXX;
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
// 2. 建立请求NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3. 建立并启动连接NSURLConnection
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
// 启动连接,异步连接请求
[conn start];
// 服务器通知准备,准备中转数据
self.serverData = [NSMutableData data];

GET方法

 // 1. 确定地址NSURL
NSString *urlString = [NSString stringWithFormat:@"http://XXXXX.php"];
NSURL *url = [NSURL URLWithString:urlString];
// 2. 建立请求NSURLRequest(POST)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 1) 请求方式
[request setHTTPMethod:@"POST"];
// 2) 数据体
// 因为dataUsingEncoding已经实现了转码
NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, pwd];
NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];
// 3. 建立并启动连接NSURLConnection
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
// 启动连接,异步连接请求
[conn start];
// 服务器通知准备,准备中转数据
self.serverData = [NSMutableData data];

POST方法

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{}
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{}

网络代理方法

小编能力有限,希望大牛来指点,不胜感激!!!!!!

ios网络编程(入门级别)-- 基础知识的更多相关文章

  1. socket网络编程的一些基础知识

    源地址:http://blog.csdn.net/roger_77/article/details/1453049 目录: 1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理 ...

  2. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  3. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  4. 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言   老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...

  5. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  6. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  7. [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?     http://www.52im.net/thread-1732-1-1.html   1.引言 本文接上篇<脑残式网 ...

  8. [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手   http://www.52im.net/thread-1729-1-1.html     1.引言 网络编程中TCP协议的三次握手和 ...

  9. 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...

  10. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

随机推荐

  1. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  2. Java远程访问接口的几种方式

    一.Java访问远程url接口并获取结果 1.原生JavaAPI获取 package com.util; import java.io.DataOutputStream; import java.io ...

  3. 在angular中利用分页插件进行分页

    必需:angular分页js和css  当然还有angular.js   还需要bootstrap的css angular.min.js (下面我直接把插件粘贴上去了,以免有的同学还要去找.是不是很贴 ...

  4. elementUI 表格分页后台排序记录

    表格代码 <div class="m-table"> <el-table :data="logs" style="width: 10 ...

  5. 【三分钟视频教程】iOS开发中 Xcode 报 apple-o linker 错误的#解决方案#

      [三分钟视频教程]iOS开发中 Xcode 报 apple-o linker 错误的#解决方案#   同样的道理,指向同一库文件的代码语句如果重复书写,即使重复书写所在的文件名字不同,同样会造成这 ...

  6. C++--------------------------------指针和数组替换使用原因

    马上要考试了,复习数据结构中,对C的指针不太了解,在严蔚敏<数据结构(C语言版)>中,发现p22定义顺序存储结构: typedef srtuct{ ElemType *elem; //存储 ...

  7. redis初使用

    下载地址:https://redis.io/download Redis项目不正式支持Windows.但是,微软开放技术小组开发并维护了针对Win64的Windows端口 windows版下载地址:h ...

  8. PHP中的__clone()

    1 <?php 2 class Account { 3 public $balance; 4 5 public function __construct($balance) { 6 $this- ...

  9. javascript-dom文档对象模型1

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 一:HTML DOM 树 ...

  10. LeetCode(24): 两两交换链表中的节点

    Medium! 题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说 ...