NSURLComponents
蘋果在 iOS 7 和 OS X Mavericks 中悄悄添加了 NSURLComponents
山孔,這樣就可以完美替代 NSMutableURL
了。但文檔還不是很完善,所以這個類仍然是近期Foundation新增類中隱晦的一塊。
創(chuàng)建 NSURLComponents
實(shí)例和創(chuàng)建 NSURL
實(shí)例的方法差不多磺樱,通過一個 NSString
和一個非必需的base URL參數(shù)創(chuàng)建(+componentsWithString:
& +componentsWithURL:resolvingAgainstBaseURL:
)贺辰。也可以用 alloc init
創(chuàng)建一個空的容器煎殷,和 NSDateComponents
差不多。
NSURL
和 NSURLComponents
的不同之處在于喊崖,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…
NSURL
對 CFURLRef
的轉(zhuǎn)換是 無縫的女轿。底層的 C API 有 NSURL
的所有功能。包括 CFURLCreateStringByAddingPercentEscapes
和 CFURLCreateStringByReplacingPercentEscapesUsingEncoding
異常:
* `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)用多次啟動間安全地引用文件〈竺停可以認(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)識理念早于計(jì)算機(jī)時(shí)代被提出,也將長存于人類信息體系中鹏溯。這些通用標(biāo)示合在一起便可以代表我們信息時(shí)代的架構(gòu):一個用來把我們對于宇宙每一點(diǎn)了解都encode為一個網(wǎng)絡(luò)中實(shí)體的框架罢维,這很酷,很像我們的大腦中存在很多神經(jīng)元一樣丙挽。
我們處在物理計(jì)算的寒武紀(jì)大爆發(fā)險(xiǎn)境邊緣肺孵。用不了多久就會出現(xiàn)這樣的情景:在Internet組成的世界中,我們生活中的每一部分都有一個URL颜阐,也都有一個電子化的大腦平窘,都有數(shù)字化的精神和意識。雖然不能說是奇點(diǎn)迫近瞬浓,但是初婆,我們,就正在某些未知但難以置信的奇妙事物邊緣,馬上就要感受到它的來臨磅叛。
世界總是這樣的:互相交換貓咪照片的技術(shù)屑咳,總是蘊(yùn)含著無比高深的哲學(xué)含義。