ios开发之网络编程

简介: 上周末本应早写这个网络和MapKit的。 由于周六朋友聚会,周日送一朋友回远方,吃吃喝喝的就忘掉了。 网络编程基本是移动互联这块中必须掌握的编程技巧。由于我买的的小柚子书上没有这块, 最近刚买的开发秘籍那本上的关于网络链接这块,太抽象了。

上周末本应早写这个网络和MapKit的。

由于周六朋友聚会,周日送一朋友回远方,吃吃喝喝的就忘掉了。


网络编程基本是移动互联这块中必须掌握的编程技巧。由于我买的的小柚子书上没有这块,

最近刚买的开发秘籍那本上的关于网络链接这块,太抽象了。

首先吐槽一下这本书,细节描述的还是不错的。但是不合适做入门~


然后在网络上搜索关于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

相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 数据处理
大模型开发:描述长短期记忆网络(LSTM)和它们在序列数据上的应用。
LSTM,一种RNN变体,设计用于解决RNN处理长期依赖的难题。其核心在于门控机制(输入、遗忘、输出门)和长期记忆单元(细胞状态),能有效捕捉序列数据的长期依赖,广泛应用于语言模型、机器翻译等领域。然而,LSTM也存在计算复杂度高、解释性差和数据依赖性强等问题,需要通过优化和增强策略来改进。
|
1月前
|
机器学习/深度学习
大模型开发:解释卷积神经网络(CNN)是如何在图像识别任务中工作的。
**CNN图像识别摘要:** CNN通过卷积层提取图像局部特征,池化层减小尺寸并保持关键信息,全连接层整合特征,最后用Softmax等分类器进行识别。自动学习与空间处理能力使其在图像识别中表现出色。
24 2
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
92 3
|
1月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
38 8
C++ Qt开发:QTcpSocket网络通信组件
|
10天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
12 0
|
25天前
|
SQL 前端开发 Java
五邑大学餐厅网络点餐系统设计与实现(包含完整源码详细开发过程)
五邑大学餐厅网络点餐系统设计与实现(包含完整源码详细开发过程)
|
25天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
1月前
|
存储 网络安全 C++
C++ Qt开发:QUdpSocket网络通信组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QUdpSocket`组件实现基于UDP的网络通信功能。与`QTcpSocket`组件功能类似,`QUdpSocket`组件是 Qt 中用于实现用户数据报协议(UDP,User Datagram Protocol)通信的类。UDP 是一种无连接的、不可靠的数据传输协议,它不保证数据包的顺序和可靠性,但具有低延迟和简单的特点。
20 0
C++ Qt开发:QUdpSocket网络通信组件
|
1月前
|
缓存 网络安全 调度
C++ Qt开发:QNetworkAccessManager网络接口组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QNetworkAccessManager`组件实现Web网页访问。QNetworkAccessManager是Qt网络模块中的关键类,用于管理网络访问和请求。作为一个网络请求的调度中心,它为Qt应用程序提供了发送和接收各种类型的网络请求的能力,包括常见的GET、POST、PUT、DELETE等。这个模块的核心功能在于通过处理`QNetworkReply`和`QNetworkRequest`来实现
22 0
C++ Qt开发:QNetworkAccessManager网络接口组件
|
1月前
|
监控 C++ 索引
C++ Qt开发:QNetworkInterface网络接口组件
在Qt网络编程中,`QNetworkInterface`是一个强大的类,提供了获取本地网络接口信息的能力。通过`QNetworkInterface`,可以轻松地获取有关网络接口的信息,包括接口的名称、硬件地址、IP地址和子网掩码等。这个类对于需要获取本地网络环境信息的应用程序特别有用,例如网络配置工具、网络监控程序等。`QNetworkInterface`通过提供一致而易于使用的接口,使得网络编程中的任务更加简便和可靠。
26 4
C++ Qt开发:QNetworkInterface网络接口组件