版本
Xcode 8.2.1
NSURL簡(jiǎn)介
遇到一個(gè)生詞,管他三七二十一救湖,先百度一下再說(shuō)暖庄。
- NS——iOS命名規(guī)范倡導(dǎo)一個(gè)類或者方法的開(kāi)頭兩個(gè)或三個(gè)大寫(xiě)字母指代公司或者編碼者的個(gè)人名稱犯眠,或者框架名稱等容易與其他的東西區(qū)別開(kāi)來(lái)的東西谊娇。NS代表的是NeXTSTEP,是Jobs在1985年離開(kāi)水果的時(shí)候創(chuàng)建的公司名稱眶拉。后來(lái)水果在1997年又把這個(gè)公司重新買下來(lái)千埃,里面的一部分東西成為OS X和iOS的一部分。
- URL——統(tǒng)一資源定位符是對(duì)可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問(wèn)方法的一種簡(jiǎn)潔的表示忆植,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址放可≮司剩互聯(lián)網(wǎng)上的每個(gè)文件都有一個(gè)唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它耀里。
當(dāng)然也會(huì)搜索到很多關(guān)于NSURL的博客蜈缤,包括介紹和用法等等。但如果我們還不放心冯挎,不確定他們寫(xiě)的是否完全準(zhǔn)確底哥,怎么辦?來(lái)房官,打開(kāi)Xcode新建一個(gè)NSURL工程叠艳,我們來(lái)看看官方文檔怎么說(shuō)。
- 方法1:隨便找個(gè).h或者.m文檔輸入NSURL易阳,按option+鼠標(biāo)左擊;
- 方法2:鼠標(biāo)點(diǎn)擊NSURL吃粒,打開(kāi)Xcode右邊欄潦俺,找到Quick Help(帶問(wèn)號(hào)的那個(gè)圖標(biāo));
- 方法3:Help–>Documentation And API Reference–>搜索框內(nèi)搜索NSURL徐勃。
通過(guò)以上方法事示,我們得到蘋(píng)果的官方文檔如此描述:
- 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對(duì)象代表了一個(gè)URL,可能是包含在遠(yuǎn)程服務(wù)器上的資源位置僻肖,本地磁盤上的文件路徑肖爵,甚至任意一段編碼的數(shù)據(jù)。)
好了好了臀脏,了解得差不多了劝堪,下面我們來(lái)總結(jié)一下NSURL的一些概念和性質(zhì):
NSURL是一個(gè)包含了很多請(qǐng)求參數(shù)的類(class)。
-
NSURL最主要的參數(shù)為URLString字符串地址(如“www.baidu.com”)揉稚。其他請(qǐng)求參數(shù):scheme秒啦、host、port搀玖、user余境、password等等。
NSURL可以是網(wǎng)絡(luò)資源位置灌诅、本地文件路徑或者編碼后的數(shù)據(jù)等等芳来。
NSURL用法示例
int main(int argc, char * argv[]) {
//通過(guò)一個(gè)URL實(shí)例化一個(gè)NSURL對(duì)象
NSURL *baiduUrl = [NSURL URLWithString:@"https://www.baidu.com"];
//向服務(wù)器請(qǐng)求文本
//百度首頁(yè)的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];
//通過(guò)本地路徑生成NSURL對(duì)象
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ù)器請(qǐng)求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"];
//請(qǐng)求二進(jìn)制數(shù)據(jù)
// NSData *mp3Data = [NSData dataWithContentsOfURL:mp3Url];
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
//直接寫(xiě)入本地保存
// [mp3Data writeToFile:@"/Users/tailor/Desktop/song.mp3" atomically:YES];
[imageData writeToFile:@"/Users/tailor/Desktop/test.jpg" atomically:YES];
//請(qǐng)求文本(JSON字符串)
//JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式即舌。它基于 ECMAScript 的一個(gè)子集。JSON 采用完全獨(dú)立于語(yǔ)言的文本格式关带,但是也使用了類似于 C 語(yǔ)言家族的習(xí)慣(包括 C侥涵、C++沼撕、 C#牍白、Java卑惜、JavaScript、Perl誓篱、Python 等)嗦明。這些特性使 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言笼沥。易于人閱讀和編寫(xiě),同時(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的對(duì)象
id obj = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers //解析選項(xiàng)
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>obj.class = %@, obj = %@",[obj class],obj);
//直接使用二進(jìn)制請(qǐng)求文本
NSData *bookData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.baidu.com"]];
//轉(zhuǎn)換成為OC的對(duì)象
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:bookData
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>name = %@",dic[@"List"][0][@"name"]);
}
結(jié)果: