关于NSURLConnection的理解的和Demo

步骤(iOS9后该方法被废弃,改用NSURlSession)

  1. NSURL:确定要访问的资源
  2. NSURLRequest:根据 URL 建立请求,向服务器索要数据
  3. NSURLConnection:建立网络连接,将请求(异步)发送给服务器

示例代码

// 1. `NSURL`:确定要访问的资源
NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];

// 2. `NSURLRequest`:根据 `URL` 建立请求,向服务器索要数据
NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 3. `NSURLConnection`:建立网络连接,将请求(异步)发送给服务器
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

    NSLog(@"%@", data);
}];

NSURLConnection 代码小结

sendAsynchronousRequest 发送异步请求

  • 此方法就是异步执行的,程序员无序考虑开启线程,或者创建队列
  • 会将之前建立好的请求异步发送给服务器
  • 等到接收到服务器响应后,由 queue 负责调度 completionHandler 的执行

队列

  • 调度 completionHandler 执行的队列

    • [[NSOperationQueue alloc] init],后台线程异步执行
    • [NSOperationQueue mainQueue],主线程异步执行
  • 队列的选择
    • 如果要对数据进行耗时处理,例如:解压缩等,选择新建队列调度
    • 如果只是做简单处理,立即更新 UI,选择主队列

completionHandler

  • 网络访问已经结束,接收到服务器响应数据后的回调方法
  • response,服务器的响应,通常在开发下载功能时才会使用
响应属性 说明
URL 服务器反馈的 URL,有的时候,服务器会重定向新的 URL
MIMEType
  • 服务器告诉客户端,返回的二进制数据的类型
  • ContentType
  • 根据 MIMEType 客户端就知道使用什么软件处理返回的二进制数据
  • 网络之所以这么丰富多彩,是因为有非常多的客户端软件
statusCode 状态码

  • 1XX消息
  • 2XX 成功
  • 3XX 更多选择
  • 4XX 客户端错误
  • 5XX 服务器错误
expectedContentLength 数据长度,下载文件总长度
suggestedFilename 建议的文件名
  • data 服务器返回的二进制数据,程序员最关心的内容
  • connectionError 连接错误,任何网络访问都有可能出现错误
// 标准的错误处理方法
if (connectionError || data == nil) {
    NSLog(@"网络不给力!");
    return;
}

请求

  1. 基于 URL 建立请求
  2. 设置请求属性:缓存策略网络超时时长
  3. 告诉服务器额外信息:客户端类型身份验证...
// 告诉服务器,客户端的类型是 iPhone,而且支持 AppleWebKit
[request setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];

缓存策略

枚举 数值 说明
NSURLRequestUseProtocolCachePolicy 0 默认的缓存策略
NSURLRequestReloadIgnoringLocalCacheData 1
  • 忽略本地缓存数据,始终加载服务器的数据
  • 对数据的及时性要求高的应用
  • 例如:彩票、股票等
NSURLRequestReturnCacheDataElseLoad 2 如果有缓存,就返回缓存,否则加载数据
NSURLRequestReturnCacheDataDontLoad 3 如果有缓存,就返回缓存,否则不加载

超时时长

  • 默认网络时长是 60 s
  • 建议超时时长 15~30 秒之间
  • 注意超时时长不能太短
  • SDWebImage 的默认超时时长是 15 秒
  • AFN 的默认超时时长是 60 秒
时间: 2024-11-10 01:07:35

关于NSURLConnection的理解的和Demo的相关文章

Chapter 4 深入理解Caffe MNIST DEMO中的LeNet网络模型

明代思想家王阳明提出了"知行合一",谓认识事物的道理与在现实中运用此道理,是密不可分的一回事.我以为这样的中国哲学话语,对于学习者来说,极具启发意义,要细细体会.中华文明源远流长,很多做人做事的道理,孕育其中,需用心体会,并学以致用. 以"知"促"行".以"行"促"知".知行合一.--The unity of Inner knowledge and action. 在chapter 3 中提供了一个很好的实

汇率换算自然语言理解功能IOS DEMO

原文地址 http://blog.csdn.net/dfman1978/article/details/78468318 前言 目前使用语音输入越来越普遍.语音输入不仅高效,而且更加自然,符合人类的输入方式.在这里开发了一个汇率换算的 APP,展示了如何使用语音输入和语音识别. APP简介 这个 APP可以识别用户的输入,然后返回结果,并使用自然语言读出来.  用户可以点击话筒图标,进行语音输入:"1元人民币兑换多少美元".或者说"350泰铢兑换多少人民币"等等.结

语音识别,语义理解一站式解决之二(android,olami)

转载请注明CSDN地址:http://blog.csdn.net/ls0609/article/details/72765789 语音在线听书demo:http://blog.csdn.net/ls0609/article/details/71519203 前言 国内语音识别技术已有多家,而olami不仅在语音识别上准确率较高,更重要的是在语义理解上十分强大,本文用olami sdk做了一个记账demo(记账部分代码参考开源代码),这个demo可以语音添加不同消费记录,查询当天,当月消费情况,删

Android端小米推送Demo解析和实现方法

前言 最近这几个月都是在准备找工作和找工作中,付出了很多,总算是有点收获,所以都没有怎么整理笔记.到了最近才有空把自己的笔记整理一下发上来,分享一下我的学习经验. 推送 由于最近项目要用到Android的消息推送,关于Android推送的解决方案有很多种,有C2DM,轮询, SMS,MQTT协议,XMPP协议和第三方平台,经过我们对项目需求的考虑之后我们选择了第三方平台推送的小米推送,下面就是小米推送的实现方法. 实现准备 想要用小米推送首先要去小米开发者平台注册申请开发者账号,经过1到3天的审

理解伪元素

伪元素顾名思义伪装成元素,但不是元素,这与生成内容相关.生成内容主要指由浏览器创建的内容,而不是由标志或内容来表示.生成内容主要由:before和:after伪元素来实现,当然伪元素还包括:first-line,:first-letter和::selection 用法 :first-letter 指定一个元素第一个字母的样式 [注意1]所有前导标点符号应与第一个字母一同应用该样式 [注意2]只能与块级元素关联 [注意3]只有当选择器部分和左大括号之间有空格时,IE6-浏览器才支持.因为first

sea模块化require

在github上找个一个sea.js模块化工程,阅读源码的时候有一块地方不理解:    在demo.js中 define(function(require, exports, module) { var jQuery = require("jquery-2.0.3"); var v = require('../base/version'); var d = require('util/convert/date'); var m = require('util/map/baidu-map

IE6,IE7,IE8 css bug搜集及浏览器兼容性问题解决方法汇总

http://www.jb51.net/css/85640.html 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1:li边距“无故”增加  任何事情都是有原因的,li边距也不例外.  先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着头脑,仔细“研究”发现是由于其低级元素ul的paddi

[WebGL入门]二十一,从平行光源发出的光

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 本次的demo的运行结果 照亮世界 上次绘制了一个像甜甜圈一样的圆环体模型,虽然没有涉及特别的新知识,但是也算成功的绘制出了3D模型了吧. 那么,这次来看一下光. 光在3D渲染中有很多种类和使用方法,想把光研究透彻,也是很不容易的. 现实世界中我们能看到物体,是因为物体反射的光进入我们的眼睛.

NeHe OpenGL教程 第三十六课:从渲染到纹理

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十六课:从渲染到纹理 放射模糊和渲染到纹理: 如何实现放射状的滤镜效果呢,看上去很难,其实很简单.把渲染得图像作为纹理提取出来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试. 嗨,我是Dario Corn