NSURLComponents

NSURLComponents

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

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

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

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

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

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

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

Percent-Encoding

說起 percent-encoding…

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

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

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

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

Bookmark URL

最后一個話題是關于 bookmark URL 的,bookmard URL 可以在應用多次啟動間安全地引用文件。可以認為是一種對 文件描述符 的持久化。

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

你可以在蘋果官方的文件系統編程指南的”Locating Files Using Bookmarks”部分中閱讀更多關于 bookmark URL 的內容。


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

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

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

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容