您的位置:首页 > 移动开发 > IOS开发

iOS Get同步与异步

2015-12-03 19:54 330 查看
//异步所需要签订的协议
@interfaceGetViewController
()<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=公厕®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];

//设置一个请求标识
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: