IOS:同步请求和异步请求
2013-12-27 11:15
120 查看
1、同步请求和异步请求
同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行。
2、代码实现
创建一个空项目,在AppDelegate.h中遵守协议,并声明一个属性来存储数据。
@interface AppDelegate :UIResponder <UIApplicationDelegate,NSURLConnectionDataDelegate>
@property (strong,nonatomic)
UIWindow *window;
@property(retain,nonatomic)NSMutableData *pData;
@end
在AppDelegate.m
首先声明一个宏定义,
#define URL @"http//www.baidu.com"
- (BOOL)application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindowalloc]
initWithFrame:[[UIScreenmainScreen]
bounds]]autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColorwhiteColor];
//同步请求
//创建URL
//NSURL *pUrl = [NSURL URLWithString:URL];
//创建一个请求
/*NSURLRequest *pRequ = [NSURLRequest requestWithURL:pUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//建立连接
NSError *pError = nil;
NSURLResponse *pRespond = nil;
//向服务器发起请求,(线程会一直等待服务器响应,直到超出60秒,)
NSData *pData = [NSURLConnection sendSynchronousRequest:pRequ returningResponse:&pRespond error:&pError];
NSLog(@"pData = %@",pData);
NSLog(@"pError = %@",[pError localizedDescription]);*/
//异步请求
//获取网络资源路径
NSURL *pURL = [NSURLURLWithString:URL];
//根据URL创建请求
//NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
NSURLRequest *pRequest = [NSURLRequestrequestWithURL:pURL
cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];
//发起请求,通过委托模式回调完成数据获取
[NSURLConnectionconnectionWithRequest:pRequest
delegate:self];
[self.windowmakeKeyAndVisible];
return
YES;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSLog(@"服务器接收响应");
//初始化
self.pData = [NSMutableDatadataWithCapacity:5000];
}
//服务器返回数据,客户端开始接受
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
NSLog(@"开始接受数据");
//将数据放入缓存区
[self.pDataappendData:data];
}
//数据接收完毕调用的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"数据接收完毕");
NSLog(@"pData = %@",self.pData);
}
//数据接收失败时调用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
NSLog(@"数据接收失败,原因:%@",[errorlocalizedDescription]);
}
同时不要忘了释放pData啊。
- (void)dealloc
{
[_pDatarelease];
[_windowrelease];
[superdealloc];
}
同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行。
2、代码实现
创建一个空项目,在AppDelegate.h中遵守协议,并声明一个属性来存储数据。
@interface AppDelegate :UIResponder <UIApplicationDelegate,NSURLConnectionDataDelegate>
@property (strong,nonatomic)
UIWindow *window;
@property(retain,nonatomic)NSMutableData *pData;
@end
在AppDelegate.m
首先声明一个宏定义,
#define URL @"http//www.baidu.com"
- (BOOL)application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindowalloc]
initWithFrame:[[UIScreenmainScreen]
bounds]]autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColorwhiteColor];
//同步请求
//创建URL
//NSURL *pUrl = [NSURL URLWithString:URL];
//创建一个请求
/*NSURLRequest *pRequ = [NSURLRequest requestWithURL:pUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//建立连接
NSError *pError = nil;
NSURLResponse *pRespond = nil;
//向服务器发起请求,(线程会一直等待服务器响应,直到超出60秒,)
NSData *pData = [NSURLConnection sendSynchronousRequest:pRequ returningResponse:&pRespond error:&pError];
NSLog(@"pData = %@",pData);
NSLog(@"pError = %@",[pError localizedDescription]);*/
//异步请求
//获取网络资源路径
NSURL *pURL = [NSURLURLWithString:URL];
//根据URL创建请求
//NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
NSURLRequest *pRequest = [NSURLRequestrequestWithURL:pURL
cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];
//发起请求,通过委托模式回调完成数据获取
[NSURLConnectionconnectionWithRequest:pRequest
delegate:self];
[self.windowmakeKeyAndVisible];
return
YES;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSLog(@"服务器接收响应");
//初始化
self.pData = [NSMutableDatadataWithCapacity:5000];
}
//服务器返回数据,客户端开始接受
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
NSLog(@"开始接受数据");
//将数据放入缓存区
[self.pDataappendData:data];
}
//数据接收完毕调用的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"数据接收完毕");
NSLog(@"pData = %@",self.pData);
}
//数据接收失败时调用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
NSLog(@"数据接收失败,原因:%@",[errorlocalizedDescription]);
}
同时不要忘了释放pData啊。
- (void)dealloc
{
[_pDatarelease];
[_windowrelease];
[superdealloc];
}
相关文章推荐
- IOS之同步请求、异步请求、GET请求、POST请求
- IOS之同步请求、异步请求、GET请求、POST请求
- iOS数据请求之post异步同步
- 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
- IOS开发之NSURL网络请求,同步异步,GET,POST
- IOS之同步请求、异步请求、GET请求、POST请求
- IOS之同步请求、异步请求、GET请求、POST请求
- IOS之同步请求、异步请求、GET请求、POST请求
- IOS之同步请求、异步请求、GET请求、POST请求
- iOS学习笔记——同步请求下载与异步请求下载
- IOS中get同步异步请求与post同步异步请求
- IOS之同步请求、异步请求、GET请求、POST请求(很不错的总结)
- IOS之同步请求、异步请求、GET请求、POST请求
- iOS开发 -- GET 和 POST请求(同步异步链接)
- iOS开发:网络请求之get、post同步异步请求
- IOS之同步请求、异步请求、GET请求、POST请求
- IOS网络请求(同步GET,同步POST,异步GET,异步POST)
- iOS 信号量解决-网络异步请求的数据同步返回问题
- iOS中GET请求的同步与异步
- IOS之同步请求、异步请求、GET请求、POST请求