版本
Xcode 8.2.1
NSURL簡介
遇到一個生詞,管他三七二十一,先百度一下再說。
- NS——iOS命名規(guī)范倡導(dǎo)一個類或者方法的開頭兩個或三個大寫字母指代公司或者編碼者的個人名稱,或者框架名稱等容易與其他的東西區(qū)別開來的東西。NS代表的是NeXTSTEP,是Jobs在1985年離開水果的時候創(chuàng)建的公司名稱。后來水果在1997年又把這個公司重新買下來,里面的一部分東西成為OS X和iOS的一部分。
- URL——統(tǒng)一資源定位符是對可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址?;ヂ?lián)網(wǎng)上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。
當(dāng)然也會搜索到很多關(guān)于NSURL的博客,包括介紹和用法等等。但如果我們還不放心,不確定他們寫的是否完全準(zhǔn)確,怎么辦?來,打開Xcode新建一個NSURL工程,我們來看看官方文檔怎么說。
- 方法1:隨便找個.h或者.m文檔輸入NSURL,按option+鼠標(biāo)左擊;
- 方法2:鼠標(biāo)點擊NSURL,打開Xcode右邊欄,找到Quick Help(帶問號的那個圖標(biāo));
- 方法3:Help–>Documentation And API Reference–>搜索框內(nèi)搜索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,可能是包含在遠(yuǎn)程服務(wù)器上的資源位置,本地磁盤上的文件路徑,甚至任意一段編碼的數(shù)據(jù)。)
好了好了,了解得差不多了,下面我們來總結(jié)一下NSURL的一些概念和性質(zhì):
NSURL是一個包含了很多請求參數(shù)的類(class)。
-
NSURL最主要的參數(shù)為URLString字符串地址(如“www.baidu.com”)。其他請求參數(shù):scheme、host、port、user、password等等。
NSURL可以是網(wǎng)絡(luò)資源位置、本地文件路徑或者編碼后的數(shù)據(jù)等等。
NSURL用法示例
int main(int argc, char * argv[]) {
//通過一個URL實例化一個NSURL對象
NSURL *baiduUrl = [NSURL URLWithString:@"https://www.baidu.com"];
//向服務(wù)器請求文本
//百度首頁的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"];
//從本地讀取數(shù)據(jù)
NSString *localStr = [[NSString alloc]initWithContentsOfURL:localUrl
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Local String = %@",localStr);
//從服務(wù)器請求MP3數(shù)據(jù)(非文本)、圖片
// 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"];
//請求二進(jìn)制數(shù)據(jù)
// 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)是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript 的一個子集。JSON 采用完全獨立于語言的文本格式,但是也使用了類似于 C 語言家族的習(xí)慣(包括 C、C++、 C#、Java、JavaScript、Perl、Python 等)。這些特性使 JSON 成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機器解析和生成(一般用于提升網(wǎng)絡(luò)傳輸速率)。
NSString *jsonStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://www.baidu.com"]
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>jasonStr = %@",jsonStr);
//轉(zhuǎn)換成為data
NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
//把Jason字符串轉(zhuǎn)換成為OC的對象
id obj = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers //解析選項
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>obj.class = %@, obj = %@",[obj class],obj);
//直接使用二進(jìn)制請求文本
NSData *bookData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.baidu.com"]];
//轉(zhuǎn)換成為OC的對象
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:bookData
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>name = %@",dic[@"List"][0][@"name"]);
}
結(jié)果: