//异步所需要签订的协议
@interface
GetViewController
()<
NSURLConnectionDelegate
,
NSURLConnectionDataDelegate
>
//
声明一个链接属性,主要用是在页面销毁但加载还没完成的时候,在dealloc上终止用的
@property
(
nonatomic
,
retain
)
NSURLConnection
*connection;
//
声明一个可变的
data
用于获取到完整的
data;,注意在那里初始化
@property
(
nonatomic
,
retain
)
NSMutableData
*receiveData;
- (void)dealloc
{
//注意:当这个页面被销毁的时候如果请求还没有完成需要终止这个链接
[_connectioncancel];
[_connectionrelease];
[superdealloc];
{
//注意:当这个页面被销毁的时候如果请求还没有完成需要终止这个链接
[_connectioncancel];
[_connectionrelease];
[superdealloc];
}
-----------------------------------------------------------------------
#define kSearchURL @"http://api.map.baidu.com/place/v2/search?query=公厕®ion=上海&output=json&ak=6E823f587c95f0148c19993539b99295"
#define kNewsListURL @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"
#define kNewsListParam @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213"
#define kImageURL @
"http://image.zcool.com.cn/56/13/1308200901454.jpg"
-------------------------------------------------------------------------
get同步
// 如果有中文转化一下编码格式
NSString *newStr = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLFragmentAllowedCharacterSet]];
//把字符串的网址转化成网址对象
NSURL *url = [NSURLURLWithString:newStr];
//创建一个请求
//timeoutInterval请求超时的时间 秒为单位
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:10];
//设置一个请求标识
NSURL *url = [NSURLURLWithString:newStr];
//创建一个请求
//timeoutInterval请求超时的时间 秒为单位
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:10];
//设置一个请求标识
[request setHTTPMethod:@"Get"];
//利用这个请求 创建一个链接
NSError *error = nil;
//创建空的,服务器响应信息
NSURLResponse *response = nil;
//建立同步链接并得到返回的数据(data)
NSError *error = nil;
//创建空的,服务器响应信息
NSURLResponse *response = nil;
//建立同步链接并得到返回的数据(data)
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"%@",dataDic);
NSLog(@"%@",response);
NSLog(@"%@",data);
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"%@",dataDic);
NSLog(@"%@",response);
NSLog(@"%@",data);
------------------------------------------------------------------------
//get异步请求
//获取网址对象 (有中文 需要转码)
NSString *urlStr = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
//利用网址创建网址对象
NSURL *url = [NSURL URLWithString:urlStr];
//利用网址对象创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
//标识请求类型
//注意:加标识符
[request setHTTPMethod:@"Get"];
-------------------------------------------------------
#pragma mark -- block异步链接方法
[NSOperationQueue mainQueue]
代表回到主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//
当数据请求完成的时候
会指定这个
block
NSLog(@"%@",data);
//
判断是否在主线程
NSLog(@"%d",[NSThread isMainThread]);
}];
-------------------------------------------------------------------
#pragma mark -- 代理方法异步链接
//利用请求创建一个异步链接
self.connection = [NSURLConnection connectionWithRequest:requestdelegate:self];
//开始链接
[self.connectionstart];
#pragma mark -- 代理方法异步链接
//利用请求创建一个异步链接
self.connection = [NSURLConnection connectionWithRequest:requestdelegate:self];
//开始链接
[self.connectionstart];
---------------------------------------------------------------------
#pragma mark --代理方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//链接成功时创建data
self.receiveData = [NSMutableData data];
NSLog(@"已经接收到服务器的响应信息,说明链接成功");
NSLog(@"%@",response);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//多次触发这个方法才能接收到完整的data
//所以这个时候需要拼接一下data
//拼接data
[self.receiveData appendData:data];
NSLog(@"接收到数据触发的方法");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"%@",self.receiveData);
//解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"%@",dataDic);
//如果在tableView上展示的话
//注意:要刷新界面
NSLog(@"已经完成数据加载触发的方法");
}
//请求失败时触发
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"请求失败时触发 %@",error);
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//链接成功时创建data
self.receiveData = [NSMutableData data];
NSLog(@"已经接收到服务器的响应信息,说明链接成功");
NSLog(@"%@",response);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//多次触发这个方法才能接收到完整的data
//所以这个时候需要拼接一下data
//拼接data
[self.receiveData appendData:data];
NSLog(@"接收到数据触发的方法");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"%@",self.receiveData);
//解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"%@",dataDic);
//如果在tableView上展示的话
//注意:要刷新界面
NSLog(@"已经完成数据加载触发的方法");
}
//请求失败时触发
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"请求失败时触发 %@",error);
}
UI第十六天 16-NSURLRequest