标签:
分类: OC语言基础 |
同步、异步、JSON解析、XML解析
NSData 字节数据存储,二进制存储,苹果中认为字符型和字节型都可以存,即计算机中所有类型的数据,主要用于网络传输数据的缓冲存储
GET请求,只支持255个字符 ,安全性较差,将请求信息附加在超链接上,较方便
POST请求,上传没有大小限制,请求信息在请求体内,在超链接上不能看到,安全性强,缺点:不方便
同步连接:UI “冻结”
异步连接:UI “不冻结”
异步连接,用代理:下载容易造成UI冻结,耗时,这时候用代理来操作,就可以在后台操作,同时可以做别的事情
1.同步连接网络请求
//同步连接网络请求
- (IBAction)sendMassage:(id)sender {
[self.textUrl resignFirstResponder];
NSURL *url=[NSURL URLWithString:self.textUrl.text];
NSURLRequest *req=[NSURLRequest requestWithURL:url];
NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; //创建data对象,接收请求返回的数据
NSLog(@"发起同步连接");
NSString *jsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@",jsonStr);
//JSON解析
NSDictionary*jsonDic=[jsonStr JSONValue];
NSArray *array=[jsonDic objectForKey:@"items"];
NSDictionary*dic=[array objectAtIndex:0];
NSString*string=[dic objectForKey:@"city"];
NSLog(@"解析出来的城市为:%@",string);
}
2.异步连接网络请求
//异步连接网络请求
- (IBAction)sendTelegateMassage:(id)sender {
[self.textUrl resignFirstResponder]; //撤销文本框响应
NSURL *url=[NSURL URLWithString:self.textUrl.text];//创建URL对象
NSURLRequest *req=[NSURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:req delegate:self];//异步请求,使用代理,代理为self
NSLog(@"发起异步连接");
}
//是否建立连接
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"连接已建立");
self.completeData=[[NSMutableData alloc]init];//给completeData开辟空间,用于接收完整数据
}
//是否在接收数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"正在传输数据");
[self.completeData appendData:data];//反复执行该方法,向completeData中添加接收回来的数据,直到数据完整
}
//连接是否完成
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"数据接收完成");
NSString *jsonStr=[[NSString alloc]initWithData:self.completeData encoding:NSUTF8StringEncoding];
NSLog(@"%@",jsonStr);
//JSON解析
NSDictionary*jsonDic=[jsonStr JSONValue];
NSArray *array=[jsonDic objectForKey:@"items"];
NSDictionary*dic=[array objectAtIndex:0];
NSString*string=[dic objectForKey:@"city"];
NSLog(@"解析出来的城市为:%@",string);
}
在.h文件中标示出要遵循的协议 >
@interface ViewController : UIViewController <</span>NSURLConnectionDataDelegate>
下面三种方法在异步连接中需要实现,它是在协议中定义的方法,所以不必再次声明
////是否建立连接
//-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
////是否在接收数据
//-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
////连接是否完成
//-(void)connectionDidFinishLoading:(NSURLConnection *)connection;
*关于JSON解析:
JSON和XML都是一种数据格式组织形式。
JSON数据格式规则:大括号代表字典,中括号(或小括号)代表数组。冒号左右两边分别为键和值。数据与数据之间用逗号分隔。
整体为一个数组,数组元素为两个字典,每个字典中又包括三对键和值。
使用JSON解析之前需要先导入JSON工具包。
导入框架:点击项目,在Build Phases下的Link Binary With Librarids 中导入,在Build Settings中做配置,更改或者添加 search 路径
标签:
原文地址:http://www.cnblogs.com/positiveenergy/p/4573982.html