iOS网络编程之ASIHTTPRequest

本文介绍iOS网络编程的基础知识,包括使用NSURLConnection进行简单的GET请求,处理响应数据,并将其转换为可读格式。此外还讨论了数据编码的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

找了半天没找到源文出处。

可以参考的一个地址:http://www.cocoachina.com/bbs/read.php?tid-31300.html

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


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

HTTP包装开源项目ASIHTTPRequest。

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


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

[cpp]  view plain copy
  1. //  
  2. //  NLViewController.m  
  3. //  NetWorkTest  
  4. //  
  5. //  Created by Nono on 12-5-16.  
  6. //  Copyright (c) 2012年 NonoWithLilith. All rights reserved.  
  7. //  
  8. #import "NLViewController.h"  
  9.   
  10. @interface NLViewController ()  
  11.   
  12. @end  
  13.   
  14. @implementation NLViewController  
  15. @synthesize label = _label;  
  16. @synthesize data = _data;  
  17. @synthesize connection = _connection;  
  18. - (void)dealloc{  
  19.     [self.label release];  
  20.     [self.data release];  
  21.     [super dealloc];  
  22. }  
  23. - (void)viewDidLoad  
  24. {  
  25.     [super viewDidLoad];  
  26.     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, 300.0, 400)];  
  27.     self.label = label;  
  28.     label.textAlignment = UITextAlignmentCenter;  
  29.     [label setNumberOfLines:0];  
  30.     label.lineBreakMode = UILineBreakModeWordWrap;   
  31.     self.label.text = @"正在在请求数据";  
  32.     [self.view addSubview:label];  
  33.     [label release];  
  34.     //step 1:请求地址  
  35.     NSString *urlString = @"http://www.google.com";  
  36.     NSURL *url = [NSURL URLWithString:urlString];  
  37.     //step 2:实例化一个request  
  38.     NSURLRequest *requrst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];  
  39.     //step 3:创建链接  
  40.     self.connection = [[NSURLConnection alloc] initWithRequest:requrst delegate:self];  
  41.     if ( self.connection) {  
  42.         NSLog(@"链接成功");  
  43.     }else {  
  44.         NSLog(@"链接失败");  
  45.     }  
  46.       
  47.     [url release];  
  48.     [urlString release];  
  49.     [requrst release];  
  50.     // Do any additional setup after loading the view, typically from a nib.  
  51. }  
  52.   
  53. - (void)viewDidUnload  
  54. {  
  55.     self.label = nil;  
  56.     self.data = nil;  
  57.     [super viewDidUnload];  
  58.     // Release any retained subviews of the main view.  
  59. }  
  60.   
  61. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  62. {  
  63.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  64. }  
  65.   
  66. #pragma mark-  
  67. #pragma NSUrlConnectionDelegate methods  
  68. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  
  69. {  
  70.     //接受一个服务端回话,再次一般初始化接受数据的对象  
  71.      
  72.     NSLog(@"返回数据类型:%@",[response textEncodingName]);   
  73.     NSMutableData *d = [[NSMutableData alloc] init];  
  74.      self.data = d;  
  75.     [d release];  
  76. }  
  77.   
  78. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  
  79. {  
  80.     //接受返回数据,这个方法可能会被调用多次,因此将多次返回数据加起来  
  81.       
  82.     NSUInteger datalength = [data length];  
  83.     NSLog(@"返回数据量:%d",datalength);  
  84.     [self.data appendData:data];  
  85. }  
  86.   
  87. - (void)connectionDidFinishLoading:(NSURLConnection *)connection  
  88. {  
  89.     //连接结束  
  90.       
  91.     NSLog(@"%d:",[self.data length]);  
  92.     NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);  
  93.     NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc];  
  94.    // string i  
  95.     NSLog(@"最后的结果:%@",mystr);  
  96.     self.label.text = mystr;  
  97.     [mystr release];  
  98.     [self.connection release];  
  99. }  
  100.   
  101. - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  
  102. {  
  103.     //链接错误  
  104. }  
  105.   
  106. @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

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
管理员功能需求 用户管理 查看用户列表:显示所有用户基本信息 添加用户:支持输入新用户信息并保存至数据库 修改用户信息:支持选择用户并更新其信息 删除用户:支持从数据库中删除选定用户 实习报告成绩管理 查看实习报告列表:显示所有学生实习报告 批阅实习报告:支持选择报告并给出批阅意见和评分 查看实习成绩列表:显示所有学生实习成绩 录入实习成绩:支持选择学生并输入成绩 修改实习成绩:支持更新学生实习成绩 通知公告管理 发布通知公告:支持输入通知内容并发布至系统 管理通知公告:支持查看、编辑和删除已发布通知 教师功能需求 学生管理 查看所指导学生列表:显示教师负责的所有学生 查看学生实习情况:支持查看学生实习岗位、日志、报告等 实习报告批阅成绩录入 查看待批阅报告列表:显示教师待批阅的实习报告 批阅报告:支持选择报告并给出批阅意见和评分 通知公告查看 查看系统通知公告:显示系统发布的所有通知和公告 实习岗位管理 发布实习岗位:支持输入岗位信息并发布至系统 编辑实习岗位:支持更新已发布岗位信息 删除实习岗位:支持从系统中删除选定岗位 学生功能需求 个人信息管理 查看个人信息:显示学生基本信息 修改个人信息:支持更新学生信息 实习岗位查询与申请 查询实习岗位:显示所有可用实习岗位 申请实习岗位:支持选择岗位并提交申请 实习日志提交 提交实习日志:支持输入日志内容并提交至系统 查看实习日志:显示学生提交的实习日志 实习报告提交 提交实习报告:支持输入报告内容并提交至系统 查看实习报告:显示学生报告及批阅意见 通知公告查看 查看系统通知公告:显示系统发布的所有通知和公告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值