NSURLConnection和NSMutableURLRequest 实现同步、异步请求

发布时间:2016-12-10 9:37:43 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"NSURLConnection和NSMutableURLRequest 实现同步、异步请求",主要涉及到NSURLConnection和NSMutableURLRequest 实现同步、异步请求方面的内容,对于NSURLConnection和NSMutableURLRequest 实现同步、异步请求感兴趣的同学可以参考一下。

一、同步请求-GET方式 // 要请求的地址 NSString *urlString=@"地址,我就只有保密了!你懂的"; // 将地址编码 urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; // 实例化NSMutableURLRequest,并进行参数配置 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString: urlString]]; [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; [request setTimeoutInterval: 60]; [request setHTTPShouldHandleCookies:FALSE]; [request setHTTPMethod:@"GET"]; // Response对象,用来得到返回后的数据,比如,用statusCode==200 来判断返回正常 NSHTTPURLResponse *response; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; // 处理返回的数据 NSString *strReturn = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"%@",strReturn); NSLog(@"%d",[response statusCode]); // 对象还是要释放的 [request release]; [strReturn release]; 关于,同步GET请求,也没有什么好说的。我都做了备注! 二、异步请求-GET方式 这种,方式请求就有点麻烦了!因为是异步的嘛。 根据以下步骤: 1.在*.h文件中,实现NSURLConnectionDelegate协议。 例如: @interface MoreViewController : UIViewController<</span>NSURLConnectionDelegate> 2.在*.m文件中,进行异步请求和实现协议方法。 异步请求: NSString *urlString=@"地址,我就只有保密了!你懂的"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString: urlString]]; [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; [request setTimeoutInterval: 60]; [request setHTTPShouldHandleCookies:FALSE]; [request setHTTPMethod:@"GET"]; // NSURLConnection* aSynConnection 可以申明为全局变量. // 在协议方法中,通过判断aSynConnection,来区分,是哪一个异步请求的返回数据。 aSynConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 协议方法: #pragma mark- NSURLConnectionDelegate 协议方法 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)aResponse{ NSLog(@"请求成功!"); returnInfoData=[[NSMutableData alloc]init]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [returnInfoData appendData:data]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"didFailWithError"); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ if( [connection isEqual: aSynConnection]) { NSString *asyReturn = [[NSString alloc] initWithData:returnInfoData encoding:NSUTF8StringEncoding]; NSLog(@"%@",asyReturn); [returnInfoData release]; returnInfoData = nil; [asyReturn release]; } } 关于,POST请求,因为没有地址让我测试,就暂时,先不贴了! 就是要设置一些POST的相关参数: [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:postData]; 等有机会,让我测试通了,在贴! 但是,我发现,这样的事情: 上边提及的几个协议方法,是过期了的。所以,虽然能用,但是,总感觉不好。应该有替代的相关方法吧。 于是,继续追寻。终于找到了! 原来,苹果官方,将NSURLConnectionDelegate协议废除(虽然还能用),并使用NSURLConnectionDataDelegate协议来代替。并且重写了相关的一些方法。分别看一下,这两个协议就清楚了。 @protocol NSURLConnectionDelegate <<span style="color: #743fa4">NSObject> @protocol NSURLConnectionDataDelegate <<span style="color: #743fa4">NSURLConnectionDelegate> 做个标记,以待来着! 希望对您有所帮助!

上一篇:php gmagick 安装 类库
下一篇:[27期] 电子商城项目总结

相关文章

相关评论