IOS ---网络异步请求

异步请求使用与同步和队列式异步请求相同的对象,只不过又增加了另一个对象,即NSURLConnectionDelegate:

上代码:

#import "ViewController.h"

NSInteger totalDownLoaded = 0;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSURL *url = [NSURL URLWithString:@"http://www.example.com/test.php"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];

    [conn start];
}

/*
 *如果协议处理器接收到来自服务器的重定向请求,就会调用该方法
 */
-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response{
//    NSLog(@"All Headers = %@", [(NSHTTPURLResponse *) response allHeaderFields]);
    return  request;
}

/*
 *当协议处理器接收到足够的数据来创建URL响应对象时会调用didReceiveResponse方法。如果在接收到足够的数据来构建对象前出现了错误,
 *就不会调用该方法
 */

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    NSLog(@"All Headers = %@", [httpResponse allHeaderFields]);
    NSLog(@"statusCode = %ld", (long)httpResponse.statusCode);
    if (httpResponse.statusCode != 200) {
        [connection cancel];
        return;
    }
}

/*
 *当协议处理器接收到部分或全部响应体时会调用该方法。该方法可能不会调用,也可能调用多次,并且调用总是跟在最初的connection:didReceiveResponse之后
 */
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    totalDownLoaded += [data length];
    NSLog(@"%ld", (long)totalDownLoaded);
}

/*
 *当连接失败时会调用这个委托方法。该方法可能会在请求处理的任何阶段得到调用
 */
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"netWork connect error");
}

/*
 *当整个请求完成加载并且接收到的所有数据都被传递给委托后,就会调用该委托方法
 */
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"Finish");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-11-10 15:09:23

IOS ---网络异步请求的相关文章

【读书笔记】iOS网络-优化请求性能

一,度量网络性能 1,网络带宽 用于描述无线网络性能的最常见度量指标就是带宽.在数字无线通信中,网络带宽可以描述为两个端点之间的通信通道每秒钟可以传输的位数.现代无线网络所能提供的理论带宽是很高的.不过请记住,运营商与网络设备提供商引用的带宽数字常常是该项技术的理论最大值,网络设备使用的实际带宽可能与这个最大值之间存在很大的偏差. 2,网络延迟. 度量网络性能的第2个因素是网络延迟,指的是网络包在两个端点间一次往返所需的时间.无线运营商很少会提到网络的延迟数据,不过延迟却会对应用的实际性能造成很

iOS 网络的请求

既然上篇文章说到了网络的判断,那这篇文章就来讲一下网络的请求吧,如有不对,敬请纠正 请求方式:GET.POST.SOAP GET->构建不可变的请求对象 1.构建网络资源路径 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; 2.构建请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 3.1 构建连接对象(同步:会造成界面假死) NSD

ios中的ASIHTTPRequest的同步请求和异步请求

1.首先加入ASI开源库 2. WebImageView.h #import <UIKit/UIKit.h> #import "ASIHTTPRequest.h" @interface WebImageView :UIImageView<ASIHTTPRequestDelegate> - (void)setImageURL:(NSURL *)url; @end WebImageView.m #import "WebImageView.h" #

ios网络学习------1get post异步请求

网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,因为一般来说属性都是和界面关联的,我们可以通过参数的方式来使用属性 #pragma mark Get登录方法 - (void)loginWithGet:(NSString *)name pwd:(NSString *)pwd { //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com?user

ios网络学习------2 用非代理方法实现异步post请求

#pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,因为一般来说属性都是和界面关联的,我们可以通过参数的方式来使用属性 #pragma mark post登录方法 -(void)loginWithPostWithName:(NSString *)userName pwd:(NSString *)pwd { //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com"];

iOS网络: NSURLConnection进行异步请求

介绍:  iOS 的应用,一般是需要通过网络进行数据的交互的,这样你的应用就成为了联机的应用了. iOS SDK 允许我们向网络发送请求,并且能够很方便的通过 NSURLConnection 这个类 来获取和发送数据,我们可以通过 NSJSONSerialization 对 JSON 进行序列化和反序列化. XML 的解析则使用 NSXMLParser 类.可以通过 Twitter 框架进行 Twitter 进行连接. 一  通过NSURLConnection进行异步下载 1. NSURLCon

ios网络学习------3 用非代理方法实现异步post请求

#pragma mark - 这是私有方法.尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void)loginWithPostWithName:(NSString *)userName pwd:(NSString *)pwd { //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com"];

iOS 网络与多线程--3.异步Get方式的网络请求(非阻塞)

通过Get请求方式,异步获取网络数据,异步请求不会阻塞主线程(用户界面不会卡死),而会建立一个新的线程. 代码如下 ViewController.h文件 1 // 2 // ViewController.h 3 // AppDemo 4 // 5 // Created by JinXin on 15/12/2. 6 // Copyright © 2015年 xx. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 // 1.

iOS网络编程之同步、异步、请求队列 2014-12-7

1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替. - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request star