iOS开发之基础篇(9)—— NSURL
2017-11-07 本文已影响11人
看影成痴
版本
Xcode 8.2.1
NSURL简介
遇到一个生词,管他三七二十一,先百度一下再说。
- NS——iOS命名规范倡导一个类或者方法的开头两个或三个大写字母指代公司或者编码者的个人名称,或者框架名称等容易与其他的东西区别开来的东西。NS代表的是NeXTSTEP,是Jobs在1985年离开水果的时候创建的公司名称。后来水果在1997年又把这个公司重新买下来,里面的一部分东西成为OS X和iOS的一部分。
- URL——统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
当然也会搜索到很多关于NSURL的博客,包括介绍和用法等等。但如果我们还不放心,不确定他们写的是否完全准确,怎么办?来,打开Xcode新建一个NSURL工程,我们来看看官方文档怎么说。
- 方法1:随便找个.h或者.m文档输入NSURL,按option+鼠标左击;
- 方法2:鼠标点击NSURL,打开Xcode右边栏,找到Quick Help(带问号的那个图标);
- 方法3:Help–>Documentation And API Reference–>搜索框内搜索NSURL。
通过以上方法,我们得到苹果的官方文档如此描述:
- NSURL——An NSURL object represents a URL that can potentially contain the location of a resource on a remote server, the path of a local file on disk, or even an arbitrary piece of encoded data.
(NSURL对象代表了一个URL,可能是包含在远程服务器上的资源位置,本地磁盘上的文件路径,甚至任意一段编码的数据。)
好了好了,了解得差不多了,下面我们来总结一下NSURL的一些概念和性质:
-
NSURL是一个包含了很多请求参数的类(class)。
-
NSURL最主要的参数为URLString字符串地址(如“www.baidu.com”)。其他请求参数:scheme、host、port、user、password等等。
-
NSURL可以是网络资源位置、本地文件路径或者编码后的数据等等。
NSURL用法示例
int main(int argc, char * argv[]) {
//通过一个URL实例化一个NSURL对象
NSURL *baiduUrl = [NSURL URLWithString:@"https://www.baidu.com"];
//向服务器请求文本
//百度首页的HTML文本
NSString *baiduHtmlStr = [[NSString alloc]initWithContentsOfURL:baiduUrl
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>baidu HTML string = %@",baiduHtmlStr);
//保存到本地
[baiduHtmlStr writeToFile:@"/Users/tailor/Desktop/baidu.html"
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
//通过本地路径生成NSURL对象
NSURL *localUrl = [NSURL fileURLWithPath:@"/Users/tailor/Desktop/baidu.html"];
//从本地读取数据
NSString *localStr = [[NSString alloc]initWithContentsOfURL:localUrl
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Local String = %@",localStr);
//从服务器请求MP3数据(非文本)、图片
// NSURL *mp3Url = [NSURL URLWithString:@"算了,找不到可用的连接o(╯□╰)o"];
NSURL *imageUrl = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488103436194&di=414e9eb226ad165684395e116dab1d9e&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D181280083%2C2434727418%26fm%3D214%26gp%3D0.jpg"];
//请求二进制数据
// NSData *mp3Data = [NSData dataWithContentsOfURL:mp3Url];
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
//直接写入本地保存
// [mp3Data writeToFile:@"/Users/tailor/Desktop/song.mp3" atomically:YES];
[imageData writeToFile:@"/Users/tailor/Desktop/test.jpg" atomically:YES];
//请求文本(JSON字符串)
//JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集。JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C、C++、 C#、Java、JavaScript、Perl、Python 等)。这些特性使 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
NSString *jsonStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://www.baidu.com"]
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>jasonStr = %@",jsonStr);
//转换成为data
NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
//把Jason字符串转换成为OC的对象
id obj = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers //解析选项
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>obj.class = %@, obj = %@",[obj class],obj);
//直接使用二进制请求文本
NSData *bookData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.baidu.com"]];
//转换成为OC的对象
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:bookData
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>name = %@",dic[@"List"][0][@"name"]);
}
结果: