iOS開發(fā)之基礎(chǔ)篇(9)—— NSURL

版本

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ì):

  1. NSURL是一個包含了很多請求參數(shù)的類(class)。

  2. NSURL最主要的參數(shù)為URLString字符串地址(如“www.baidu.com”)。其他請求參數(shù):scheme、host、port、user、password等等。

  3. 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é)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 26,185評論 7 249
  • 最后我會被找到 在一片寂靜的森林 我會在我常去的湖泊那兒看到一個少女她純潔美麗 她在湖泊對面對我笑 她看上去很喜...
    馬背酒閱讀 516評論 0 0
  • 一.什么是自定義View 自定義view可以分為三類:1.把系統(tǒng)內(nèi)置的控件組合起來生成一個新的控件;2.繼承系統(tǒng)現(xiàn)...
    一個番茄柿閱讀 4,117評論 2 35
  • 沒有人有義務(wù)一直照顧你 每個人某種意義上還都是個孩子 我有時候真的是不想笑 可是壞心情為什么要傳給他人呢 有時候是...
    可愛蛋黃派閱讀 431評論 0 2
  • 在你的QQ或是微信的通訊錄里,有沒有這樣一類人,你把他(她)放進(jìn)了通訊錄,卻始終沒和他(她)聊過一句話,每次你上線...
    孤筆客閱讀 497評論 0 2

友情鏈接更多精彩內(nèi)容