美文网首页网络
NSURLComponents

NSURLComponents

作者: vv_typist | 来源:发表于2018-08-24 14:48 被阅读326次

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,也都有一个电子化的大脑,都有数字化的精神和意识。虽然不能说是奇点迫近,但是,我们,就正在某些未知但难以置信的奇妙事物边缘,马上就要感受到它的来临。

世界总是这样的:互相交换猫咪照片的技术,总是蕴含着无比高深的哲学含义。

相关文章

  • 2019-02-21

    NSURLComponents *c = [NSURLComponents componentsWithStrin...

  • NSURLComponents

    NSURLComponents 苹果在 iOS 7 和 OS X Mavericks 中悄悄添加了 NSURLCo...

  • NSUrl/NSUrlComponents

    可以参考这个新接手的项目与原来的项目在请求接口的业务区分上有差别,原负责项目的接口区分业务都是用接口中的某个参数暂...

  • iOS获取URL参数

    NSURLComponents,iOS 7之后即可使用,可以完美替代 NSMutableURL NSURLComp...

  • NSURLComponents 使用简介 - iOS

    该类苹果在 iOS 7中添加,它(NSURLComponents)可以方便的把 URL 地址分解成多个部分; 其中...

  • “URL小能手”NSURLComponents

    背景 在项目开发中,移动原生应用会经常嵌入一些H5页面,根据不同的业务场景,可能需要移动端拼接上不同的业务参数。(...

  • [iOS-Foundation] NSURL

    NSURL /NSURLComponents URI URL(统一资源定位符) 是一种 URI,URN(统一资源名...

  • iOS 获取URL中的参数

    在开发中经常遇到通过URL来获取参数,下面总结了几个方法 通过 NSURLComponents 获取 通过 key...

  • iOS NSURLComponents 遇到的坑

    iOS NSURLComponents 遇到的坑 项目中突然有个需求,根据服务端下的地址,自己去拼完整的 url。...

  • iOS-NSURL 与 NSURLComponents 解读

    这里有一个直观的描述来解释什么是“一维数据类型”:number或string被格式化为多种多样的值,可以通过数学运...

网友评论

    本文标题:NSURLComponents

    本文链接:https://www.haomeiwen.com/subject/xvgbiftx.html