NSURLConnection的使用说明

2024-08-21 06:58

本文主要是介绍NSURLConnection的使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NSURLConnection 提供了很多灵活的方法下载URL内容 
也提供了一个简单的接口去创建和放弃连接,同时使用很多的delegate 
方法去支持连接过程的反馈和控制 

如何创建一个连接呢? 

为了下载url的内容,程序需要提供一个delegate对象,并且至少实现下面的方法 
connection:didReceiveResponse:,conncetion:didReceiveData, 
conncetion:didFailWithError:和connectionDidFinishLoading: 

举例一: 
1、先创建一个NSURL 
2、在通过NSURL创建NSURLRequest,可以指定缓存规则和超时时间 
3、创建NSURLConnection实例,指定NSURLRequest和一个delegate对象 
   如果创建失败,则会返回nil,如果创建成功则创建一个NSMutalbeData的实例用来存储数据 

代码: 
NSURLRequest *theRequest=[NSURLRequest requestWithURL: 
                  [NSURL URLWithString:@“http://www.sina.com.cn/”] 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:60.0]; 
NSURLConnection *theConncetion=[[NSURLConnection alloc]      
                   initWithRequest:theRequest delegate:self]; 
if(theConnection) 
{ 
//创建NSMutableData 
  receivedData=[[NSMutableData data] retain]; 
}else 创建失败 

NSURLConnection还有几个初始化函数,有个初始化函数可以做到创建连接但是并 
不马上开始下载,而是通过start:开始 

当收到initWithRequest: delegate: 消息时,下载会立即开始,在代理(delegate) 
收到connectionDidFinishLoading:或者connection:didFailWithError:消息之前 
可以通过给连接发送一个cancel:消息来中断下载 

当服务器提供了足够客户程序创建NSURLResponse对象的信息时,代理对象会收到 
一个connection:didReceiveResponse:消息,在消息内可以检查NSURLResponse 
对象和确定数据的预期长途,mime类型,文件名以及其他服务器提供的元信息 

要注意,一个简单的连接也可能会收到多个connection:didReceiveResponse:消息 
当服务器连接重置或者一些罕见的原因(比如多组mime文档),代理都会收到该消息 
这时候应该重置进度指示,丢弃之前接收的数据 

-(void)connection:(NSURLConnection *)connectiondidReceiveResponse: 
                        (NSURLResponse*)response 
{ 

   [receiveData setLength:0]; 

} 

当下载开始的时候,每当有数据接收,代理会定期收到connection:didReceiveData:消息 
代理应当在实现中储存新接收的数据,下面的例子既是如此 

-(void) connection:(NSURLConnection*)connection didReceiveData: 
            (NSData *) data 
{ 
   [receiveData appendData:data]; 

} 
在上面的方法实现中,可以加入一个进度指示器,提示用户下载进度 

当下载的过程中有错误发生的时候,代理会收到一个connection:didFailWithError消息 
消息参数里面的NSError对象提供了具体的错误细节,它也能提供在用户信息字典里面失败的 
url请求(使用NSErrorFailingURLStringKey) 

当代理接收到连接的connection:didFailWithError消息后,对于该连接不会在收到任何消息 

举例 
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error 
{ 
[connection release]; 

  [receivedData release]; 
   NSLog(@"Connection failed! Error - %@ %@", 
          [error localizedDescription], 
          [[error userInfo] objectForKey:NSErrorFailingURLStringErrorKey]); 
} 

最后,如果连接请求成功的下载,代理会接收connectionDidFinishLoading:消息 
代理不会收到其他的消息了,在消息的实现中,应该释放掉连接 

举例: 
-(oid)connectionDidFinishLoading:(NSURLConnection*)connection 
{ 
   //do something with the data 
  NSLog(@“succeeded  %d byte received”,[receivedData length]); 

[connection release]; 
[receivedData release]; 

} 

这篇关于NSURLConnection的使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092447

相关文章

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

关于Mybatis和JDBC的使用及区别

《关于Mybatis和JDBC的使用及区别》:本文主要介绍关于Mybatis和JDBC的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、JDBC1.1、流程1.2、优缺点2、MyBATis2.1、执行流程2.2、使用2.3、实现方式1、XML配置文件

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增