iOS Get同步与异步

//异步所需要签订的协议
@interface GetViewController ()< NSURLConnectionDelegate , NSURLConnectionDataDelegate >

// 声明一个链接属性,主要用是在页面销毁但加载还没完成的时候,在dealloc上终止用的
@property ( nonatomic , retain ) NSURLConnection *connection;

// 声明一个可变的 data 用于获取到完整的 data;,注意在那里初始化
@property ( nonatomic , retain ) NSMutableData *receiveData;

- (void)dealloc
{
   
//注意:当这个页面被销毁的时候如果请求还没有完成需要终止这个链接
    [
_connectioncancel
];
    [
_connectionrelease];
    [
superdealloc];
}
-----------------------------------------------------------------------

#define kSearchURL @"http://api.map.baidu.com/place/v2/search?query=公厕&region=上海&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"

-------------------------------------------------------------------------

get同步
// 如果有中文转化一下编码格式
    NSString *newStr = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLFragmentAllowedCharacterSet]];

//把字符串的网址转化成网址对象
   
NSURL *url = [NSURLURLWithString:newStr];
   
   
//创建一个请求
   
//timeoutInterval请求超时的时间 秒为单位
   
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:10];
   
   
//设置一个请求标识
    [request setHTTPMethod:@"Get"];
 
   //利用这个请求 创建一个链接
   
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);
------------------------------------------------------------------------
//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 --代理方法

- (
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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值