温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ios开发网络编程

发布时间:2020-07-31 23:13:17 来源:网络 阅读:340 作者:bryanscom 栏目:移动开发

网络上搜索关于ios网络编程基本就首页全是讲的同一篇文章,被转烂了。

找了半天没找到源文出处。下面是可以参考的一部分。

主要将了两部分:1.网络检测;2.简单的NSURLConnection链接以及设置代理。


问了下朋友,基本说现在都用

HTTP包装开源项目ASIHTTPRequest。

但这边我们还是从最原始的框架提供的API入手,后边我再去看下这个。


这边我就以最简单的例子来引入几个常用的API中的类。

[cpp] view plaincopy

//  

//  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~。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI