NSURLComponents
苹果在 iOS 7 和 OS X Mavericks 中悄悄添加了 NSURLComponents
,这样就可以完美替代 NSMutableURL
了。但文档还不是很完善,所以这个类仍然是近期Foundation新增类中隐晦的一块。
创建 NSURLComponents
实例和创建 NSURL
实例的方法差不多,通过一个 NSString
和一个非必需的base URL参数创建(+componentsWithString:
& +componentsWithURL:resolvingAgainstBaseURL:
)。也可以用 alloc init
创建一个空的容器,和 NSDateComponents
差不多。
NSURL
和 NSURLComponents
的不同之处在于,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…
NSURL
对 CFURLRef
的转换是 无缝的。底层的 C API 有 NSURL
的所有功能。包括 CFURLCreateStringByAddingPercentEscapes
和 CFURLCreateStringByReplacingPercentEscapesUsingEncoding
异常:
* `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,也都有一个电子化的大脑,都有数字化的精神和意识。虽然不能说是奇点迫近,但是,我们,就正在某些未知但难以置信的奇妙事物边缘,马上就要感受到它的来临。
世界总是这样的:互相交换猫咪照片的技术,总是蕴含着无比高深的哲学含义。
网友评论