NSURLComponents

NSURLComponents

蘋果在 iOS 7 和 OS X Mavericks 中悄悄添加了 NSURLComponents,這樣就可以完美替代 NSMutableURL了。但文檔還不是很完善,所以這個類仍然是近期Foundation新增類中隱晦的一塊。

創(chuàng)建 NSURLComponents 實例和創(chuàng)建 NSURL 實例的方法差不多,通過一個 NSString 和一個非必需的base URL參數(shù)創(chuàng)建(+componentsWithString: & +componentsWithURL:resolvingAgainstBaseURL:)。也可以用 alloc init 創(chuàng)建一個空的容器,和 NSDateComponents 差不多。

NSURLNSURLComponents 的不同之處在于,URL component 屬性是 readwrite 的。它提供了安全直接的方法來修改URL的各個部分:

  • scheme
  • user
  • password
  • host
  • port
  • path
  • query
  • fragment

如果嘗試賦值一個非法的scheme或port,會拋出一個異常。

另外,NSURLComponents 也有 readwrite 屬性對每個 component 進(jìn)行 [percent-encoded]。

percentEncodedUser
percentEncodedPassword
percentEncodedHost
percentEncodedPath
percentEncodedQuery
percentEncodedFragment
對這些 percent encoding 屬性的 get 操作可能會造成 retain 增加。set 操作會默認(rèn)認(rèn)為該 component 已經(jīng)正確 encode 了。試圖賦值一個非法的 percent encode 值會拋出異常。雖然 ‘;’ 是一個合法的路徑字符,但建議還是percent-encoded一下來兼容NSURL(傳遞給-stringByAddingPercentEncodingWithAllowedCharacters: URLPathAllowedCharacterSet參數(shù) 會將所有的 ‘;’ 字符 percent-encode)。

Percent-Encoding

說起 percent-encoding…

NSURLCFURLRef 的轉(zhuǎn)換是 無縫的。底層的 C API 有 NSURL 的所有功能。包括 CFURLCreateStringByAddingPercentEscapesCFURLCreateStringByReplacingPercentEscapesUsingEncoding 異常:

*   `CFURLCreateStringByAddingPercentEscapes`:創(chuàng)建一個字符串的復(fù)制,用同義的 percent-encoded 字符代替原有的字符。
CFStringRef CFURLCreateStringByAddingPercentEscapes (
   CFAllocatorRef   allocator,
   CFStringRef      originalString,
   CFStringRef      charactersToLeaveUnescaped,
   CFStringRef      legalURLCharactersToBeEscaped,
   CFStringEncoding encoding
);

CFURLCreateStringByReplacingPercentEscapesUsingEncoding: 創(chuàng)建一個新字符串,用同義的percent-encoded字符代替原有的所有可替換字符。

CFStringRef CFURLCreateStringByReplacingPercentEscapesUsingEncoding (
   CFAllocatorRef   allocator,
   CFStringRef      origString,
   CFStringRef      charsToLeaveEscaped,
   CFStringEncoding encoding
);

Bookmark URL

最后一個話題是關(guān)于 bookmark URL 的,bookmard URL 可以在應(yīng)用多次啟動間安全地引用文件??梢哉J(rèn)為是一種對 文件描述符 的持久化。

一個bookmark是一個唯一的數(shù)據(jù)類型,包含一個描述文件位置的 NSData 對象。鑒于path和文件引用URL在多次啟動間可能被破壞,bookmark就可以被用來重建某個文件的URL地址,即使文件被改名或移動了位置也可以。

你可以在蘋果官方的文件系統(tǒng)編程指南的”Locating Files Using Bookmarks”部分中閱讀更多關(guān)于 bookmark URL 的內(nèi)容。


忘記噴射火箭背包,忘記會飛的汽車吧,看看我對未來的設(shè)想:所有的東西都有一個 URL,以 Markdown 編碼,用 Git 存儲!如果你對宇宙資源定位器有興趣的話,你會同意我的想法的!

超文本一樣,通用標(biāo)識就是一個哲學(xué)概念,通用標(biāo)識理念早于計算機時代被提出,也將長存于人類信息體系中。這些通用標(biāo)示合在一起便可以代表我們信息時代的架構(gòu):一個用來把我們對于宇宙每一點了解都encode為一個網(wǎng)絡(luò)中實體的框架,這很酷,很像我們的大腦中存在很多神經(jīng)元一樣。

我們處在物理計算的寒武紀(jì)大爆發(fā)險境邊緣。用不了多久就會出現(xiàn)這樣的情景:在Internet組成的世界中,我們生活中的每一部分都有一個URL,也都有一個電子化的大腦,都有數(shù)字化的精神和意識。雖然不能說是奇點迫近,但是,我們,就正在某些未知但難以置信的奇妙事物邊緣,馬上就要感受到它的來臨。

世界總是這樣的:互相交換貓咪照片的技術(shù),總是蘊含著無比高深的哲學(xué)含義。

?著作權(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)容

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