我已经看到了关于SO之间进行转换的许多问题NSURL和NSString.他们都涉及使用NSString *path = [myURL absoluteString];或NSString *path = [myURL path];. 这些方法之间的实际区别是什么? 是否有人应该使用另一个? 我尝试过咨询Apple Docs,但我觉得它不太有帮助.
我习惯于在网站和有关在不同机器之间发送信息的其他主题的讨论中提及URL,而在单个机器上处理文件结构时从未被提及过.也许这就是我的一些困惑所在,因为它NSURL似乎是访问文件的首选方式,无论该文件是存在于网络上还是存在于本地设备上.或者这可能是一个完全不相关的话题.我甚至都不确定.
HAS*_*HAS 135
这些方法之间的实际区别是什么?
让我们分析这6行代码 - 3个用于本地代码,3个用于http URL - 并且稍微使用它们.
让我们创建一个NSURL使用该file://方案.如果你问自己,为什么有3 /后,file:你应该记住,一个完整的URL方案的存在(file://绝对或相对路径(你可以找到创造URL的更多信息,第3页RFC 1808),我们用它开始的绝对路径用/这样我们就结束了///.
NSURL *aLocalURL = [NSURL URLWithString:@"file:///Users/dennis/Desktop/"];
NSLog(@"absolute string: %@", aLocalURL.absoluteString);
NSLog(@"path: %@", aLocalURL.path);
Run Code Online (Sandbox Code Playgroud)
输出:
绝对字符串:file:/// Users/dennis/Desktop/
path:/ Users/dennis/Desktop
所以我们看到它absoluteString仍然知道它的方案,而path不再拥有这些信息.
注意: path是文件(目录)URL和文档状态,它被剥离的尾部斜杠.
现在让我们来看看远程URL.使用这些类型的URL,大多数人都更熟悉.我们使用与本地URL相同的过程创建它.我们的方案是现在http://和我们path是www.apple.com/.
NSURL *anHTTPURL = [NSURL URLWithString:@"http://www.apple.com/"];
NSLog(@"absolute string: %@", anHTTPURL.absoluteString);
NSLog(@"path: %@", anHTTPURL.path);
Run Code Online (Sandbox Code Playgroud)
输出:
绝对字符串:http://www.apple.com/
path:/
再次,我们看到绝对字符串仍然知道它的方案,但path现在/.因此path,在使用远程URL时,似乎不是一种合适的方法.
但是,当我们有一个URL像http://www.apple.com/index.html我们得到的
绝对字符串:http://www.apple.com/index.html
path:/index.html
阅读文档也有帮助:
根据RFC 3986,权限(主机名和端口)部分之后的前导斜杠被视为路径的一部分.
所以path是后斜杠开始的一切(包括)的authority是www.apple.com在我们的例子.
是否有人应该使用另一个?
从文档:(方法:path)
如果此URL对象包含文件URL(由isFileURL确定),则此方法的返回值适合输入NSFileManager或NSPathUtilities的方法.
在我看来,这句话清楚地表明你应该path在你工作时使用NSFileManager或NSPathUtilities.
当您使用远程URL时(通常)使用absoluteString,否则结果不是您(通常)想要的结果.
当你一起工作的本地URL使用path.
来源:
http
://www.ietf.org/rfc/rfc1808.txt http://www.ietf.org/rfc/rfc3986.txt
NSURL类参考
| 归档时间: |
|
| 查看次数: |
34684 次 |
| 最近记录: |