IOS 同步请求和异步请求 ios开发教程
2015-10-28 00:00
309 查看
下课了,坐下来静静的总结一下今天学的内容
首先是 同步请求和异步请求
同步请求,
使用主线程一次性获得所有请求数据,这就导致一个比较容易出现的问题
当请求的数据比较大时,就会出现卡顿现象,也就是阻塞主线程,这对于
用户体验来说不太好
异步请求
异步请求就是再创建一个线程,使用这个线程进行请求数据,逐步请求数据,
这样就可以不断获得数据然后进行界面更新,不至于造成卡顿现象
我们以请求一个URL链接来作为例子
同步请求
//定义一个宏
7fe0
#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:
//打印服务器传回得数据
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]);
}
至此就是异步请求了,可一边接受数据一边用接受的数据更新界面信息,不至于必须要接受完数据
才能进行界面更新。
首先是 同步请求和异步请求
同步请求,
使用主线程一次性获得所有请求数据,这就导致一个比较容易出现的问题
当请求的数据比较大时,就会出现卡顿现象,也就是阻塞主线程,这对于
用户体验来说不太好
异步请求
异步请求就是再创建一个线程,使用这个线程进行请求数据,逐步请求数据,
这样就可以不断获得数据然后进行界面更新,不至于造成卡顿现象
我们以请求一个URL链接来作为例子
同步请求
//定义一个宏
7fe0
#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:
//打印服务器传回得数据
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]);
}
至此就是异步请求了,可一边接受数据一边用接受的数据更新界面信息,不至于必须要接受完数据
才能进行界面更新。
相关文章推荐
- iOS 给服务器发送Json数据demo
- iOS NSTimer样例demo
- IOS横竖屏
- IOS 修改工程名称,项目名称
- IOS scrollView 知识点
- 我的iOS学习历程 - OC第二天
- 我的iOS学习历程 - OC第二天
- iOS中copy属性与setter赋值
- iOS程序模块化设计
- IOS开发基础知识--碎片26
- 【iOS】创建真机调试证书
- iOS中文网址路径转换URLEncode
- iOS轻量级多线程实现
- 项目中的常见文件
- IOS --Xcode6单元测试
- iOS设计模式 - 迭代器
- iOS 之 protocol的相关问题
- iOS开发之如何做一个可上下左右滑动的页面
- IOS开发笔记16-类与对象
- ios 常用的宏定义