ios android同步请求,iOS开发中的同步请求和异步请求

同步请求,

使用主线程一次性获得所有请求数据,这就导致一个比较容易出现的问题

当请求的数据比较大时,就会出现卡顿现象,也就是阻塞主线程,这对于用户体验来说不太好

我们以请求一个URL作为例子

//定义一个宏

#define kURL @"http://www.baidu.com"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.window.backgroundColor = [UIColor whiteColor];

//创建URL

NSURL *mURL = [NSURL URLWithString:kURL];

//创建一个请求,最大请求时间为20秒

NSURLRequest *requrst = [NSURLRequest requestWithURL:mURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];

//同步请求返回的参数

NSURLResponse *response = nil;

NSError *error = nil;

//建立连接,下载数据,同步请求

NSData *data = [NSURLConnection sendSynchronousRequest:requrst returningResponse:&response error:&error];

//打印服务器传回得数据

NSLog(@"data = %@",data);

//打印请求出错时的出错信息

NSLog(@"error is %@",[error localizedDescription]);

[self.window makeKeyAndVisible];

return YES;

}

异步请求

异步请求就是再创建一个线程,使用这个线程进行请求数据,逐步请求数据,

这样就可以不断获得数据然后进行界面更新,不至于造成卡顿现象

下面看同样情况下异步请求

首先得遵守协议 NSURLConnectionDataDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.window.backgroundColor = [UIColor whiteColor];

//同样先生成一个URL

NSURL *pURL = [NSURL URLWithString:kURL];

//创建一个请求

NSURLRequest *Pequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];

//发起请求,通过委托模式回调

[NSURLConnection connectionWithRequest:Pequest delegate:self];

[self.window makeKeyAndVisible];

return YES;

}

//下面就是实现协议中的方法了

#pragma 服务器开始响应

//服务器响应回调

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

NSLog(@"服务器响应");

//创建一个空的data

self.mData = [NSMutableData data];

}

//服务器返回数据 data为返回数据,注意这里不一定是一次性返回所有数据

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

NSLog(@"服务器返回数据");

[self.mData appendData:data];

}

//数据接收完毕

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

NSLog(@"数据接收完毕");

//打印收到的数据

NSLog(@"data = %@",self.mData);

}

//数据失败所调用的方法

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

NSLog(@"数据接收失败,失败原因%@",[error localizedDescription]);

}

至此就是异步请求了,可一边接受数据一边用接受的数据更新界面信息,不至于必须要接受完数据

才能进行界面更新。

以上就是同步请求和异步请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值