IOS学习十一:ios开发之网络编程
2012-05-21 11:15
501 查看
上周末本应早写这个网络和MapKit的。
由于周六朋友聚会,周日送一朋友回远方,吃吃喝喝的就忘掉了。
网络编程基本是移动互联这块中必须掌握的编程技巧。由于我买的的小柚子书上没有这块,
最近刚买的开发秘籍那本上的关于网络链接这块,太抽象了。
首先吐槽一下这本书,细节描述的还是不错的。但是不合适做入门~
然后在网络上搜索关于ios的网络编程基本就首页全是讲的同一篇文章,被转烂了。
找了半天没找到源文出处。
可以参考的一个地址:http://www.cocoachina.com/bbs/read.php?tid-31300.html
主要将了两部分:1.网络检测;2.简单的NSURLConnection链接以及设置代理。
问了下朋友,基本说现在都用
HTTP包装开源项目ASIHTTPRequest。
但这边我们还是从最原始的框架提供的API入手,后边我再去看下这个。
这边我就以最简单的例子来引入几个常用的API中的类。
1.最简单的网络链接,一个url,一个request,一个connection以及一个response返回。默认的是get请求。
2.data转码问题,这个一开始有点纠结。即,在最后我们要把NSData转化成NSString时候需要一个转码格式,一开始我习惯性的用了UTF-8,
然后发现转化后String 是Null,于是去打印了下请求返回的一些参数,显示的是GB2312~。
然后NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc];
就ok了。
4.代理方法的实现,基本以上几个都需要实现吧。还有更多可选方法可以根据自身需要去选择性实现。
但是,显然,以上这个小例子真的太基础,可能根本不能满足我们的需求,至少得有个post的列子。
然后我看了几个勉强有网络链接demo,写的比较随意化,最后在 ios developer 中找到一个官方版的比较文正规范的例子。
http://developer.apple.com/library/ios/#samplecode/SimpleURLConnections/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009245
这边也提下,官网的例子很多,也都比较规范化,我们新入门者可以多多参考。
基本上面一个例子就对sdk自带的网络api学习就算完整了。
在加上上面那个提及到的网络检测,至少,现在我们对网络这块有个大致了解。
如果想要自己考虑到上传,下载,像java自己去封装一个网络库。那就多研究下开源库。
据说上面提到那个库很强大,很简洁,也很容易入门
我这边只是简单介绍了网络开发这块几个入门点和入门资料。
有不足忘指出。
还有,哪位大神能帮我比较详细的解答下这个问题
http://www.cocoachina.com/bbs/read.php?tid=103569
由于周六朋友聚会,周日送一朋友回远方,吃吃喝喝的就忘掉了。
网络编程基本是移动互联这块中必须掌握的编程技巧。由于我买的的小柚子书上没有这块,
最近刚买的开发秘籍那本上的关于网络链接这块,太抽象了。
首先吐槽一下这本书,细节描述的还是不错的。但是不合适做入门~
然后在网络上搜索关于ios的网络编程基本就首页全是讲的同一篇文章,被转烂了。
找了半天没找到源文出处。
可以参考的一个地址:http://www.cocoachina.com/bbs/read.php?tid-31300.html
主要将了两部分:1.网络检测;2.简单的NSURLConnection链接以及设置代理。
问了下朋友,基本说现在都用
HTTP包装开源项目ASIHTTPRequest。
但这边我们还是从最原始的框架提供的API入手,后边我再去看下这个。
这边我就以最简单的例子来引入几个常用的API中的类。
// // NLViewController.m // NetWorkTest // // Created by Nono on 12-5-16. // Copyright (c) 2012年 NonoWithLilith. All rights reserved. // #import "NLViewController.h" @interface NLViewController () @end @implementation NLViewController @synthesize label = _label; @synthesize data = _data; @synthesize connection = _connection; - (void)dealloc{ [self.label release]; [self.data release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, 300.0, 400)]; self.label = label; label.textAlignment = UITextAlignmentCenter; [label setNumberOfLines:0]; label.lineBreakMode = UILineBreakModeWordWrap; self.label.text = @"正在在请求数据"; [self.view addSubview:label]; [label release]; //step 1:请求地址 NSString *urlString = @"http://www.google.com"; NSURL *url = [NSURL URLWithString:urlString]; //step 2:实例化一个request NSURLRequest *requrst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; //step 3:创建链接 self.connection = [[NSURLConnection alloc] initWithRequest:requrst delegate:self]; if ( self.connection) { NSLog(@"链接成功"); }else { NSLog(@"链接失败"); } [url release]; [urlString release]; [requrst release]; // Do any additional setup after loading the view, typically from a nib. } - (void)viewDidUnload { self.label = nil; self.data = nil; [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } #pragma mark- #pragma NSUrlConnectionDelegate methods - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { //接受一个服务端回话,再次一般初始化接受数据的对象 NSLog(@"返回数据类型:%@",[response textEncodingName]); NSMutableData *d = [[NSMutableData alloc] init]; self.data = d; [d release]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //接受返回数据,这个方法可能会被调用多次,因此将多次返回数据加起来 NSUInteger datalength = [data length]; NSLog(@"返回数据量:%d",datalength); [self.data appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { //连接结束 NSLog(@"%d:",[self.data length]); NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc]; // string i NSLog(@"最后的结果:%@",mystr); self.label.text = mystr; [mystr release]; [self.connection release]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { //链接错误 } @end简单说下:
1.最简单的网络链接,一个url,一个request,一个connection以及一个response返回。默认的是get请求。
2.data转码问题,这个一开始有点纠结。即,在最后我们要把NSData转化成NSString时候需要一个转码格式,一开始我习惯性的用了UTF-8,
然后发现转化后String 是Null,于是去打印了下请求返回的一些参数,显示的是GB2312~。
然后NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc];
就ok了。
4.代理方法的实现,基本以上几个都需要实现吧。还有更多可选方法可以根据自身需要去选择性实现。
但是,显然,以上这个小例子真的太基础,可能根本不能满足我们的需求,至少得有个post的列子。
然后我看了几个勉强有网络链接demo,写的比较随意化,最后在 ios developer 中找到一个官方版的比较文正规范的例子。
http://developer.apple.com/library/ios/#samplecode/SimpleURLConnections/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009245
这边也提下,官网的例子很多,也都比较规范化,我们新入门者可以多多参考。
基本上面一个例子就对sdk自带的网络api学习就算完整了。
在加上上面那个提及到的网络检测,至少,现在我们对网络这块有个大致了解。
如果想要自己考虑到上传,下载,像java自己去封装一个网络库。那就多研究下开源库。
据说上面提到那个库很强大,很简洁,也很容易入门
我这边只是简单介绍了网络开发这块几个入门点和入门资料。
有不足忘指出。
还有,哪位大神能帮我比较详细的解答下这个问题
http://www.cocoachina.com/bbs/read.php?tid=103569
相关文章推荐
- ios开发网络学习十一:NSURLSessionDataTask离线断点下载(断点续传)
- iOS开发之网络编程--1、NSURLSession的基本使用
- 学习IOS开发网络多线程篇--NSThread/GCD/
- iOS 开发 网络编程详解之基本网络通信过程
- iOS网络编程开发GET请求和POST请求
- ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用
- IOS学习笔记(十一)之IOS开发之表视图(UITableView)的基本介绍(一)
- 从Samples中入门IOS开发(五)------ 基于HTTP的网络编程
- ios开发网络学习十:利用文件句柄实现大文件下载
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- 数据库引擎开发以及常见数据库内部原理学习(3):网络编程基础
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- iOS开发 网络编程 Socket编程
- iOS网络开发学习笔记
- IOS学习之 网络编程(3)--数据安全
- IOS学习之 网络编程(7)--监测网络状态
- iOS开发那些事-iOS网络编程异步GET方法请求编程
- iOS网络编程开发笔记1—JSON和XML数据解析
- ios开发学习-网络(Networking) 效果源码分享--系列教程
- iOS开发之网络编程--使用NSURLConnection实现文件上传