问题一:
这些方法之间的实际区别是什么?
让我们分析一下这 6 行代码 - 3 行用于本地,3 行用于 http URL - 并稍微玩弄一下它们。
NSURL
让我们使用该file://
方案创建一个。如果您问自己为什么有 3 个/
,file:
那么您应该记住方案的完整 URL 存在(以及绝对或相对路径(您可以在第 3 页的 RFC 1808file://
中找到有关创建 URL 的更多信息)。我们使用以绝对路径开头有了 a ,我们最终得到。/
///
NSURL *aLocalURL = [NSURL URLWithString:@"file:///Users/dennis/Desktop/"];
NSLog(@"absolute string: %@", aLocalURL.absoluteString);
NSLog(@"path: %@", aLocalURL.path);
输出:
绝对字符串:file:///Users/dennis/Desktop/
路径:/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);
输出:
绝对字符串: http: //www.apple.com/
路径:/
同样,我们看到绝对字符串仍然知道它的方案,但path
现在是/
. 因此path
,在使用远程 URL 时似乎不是一种合适的方式。
但是,当我们得到一个赞URL
时http://www.apple.com/index.html
绝对字符串: http: //www.apple.com/index.html
路径:/index.html
阅读文档在这里也有帮助:
根据 RFC 3986,权限(主机名和端口)部分之后的前导斜杠被视为路径的一部分。
因此,在我们的例子中path
,一切都从斜线开始(包括) 。authority
www.apple.com
问题2
有没有时候应该使用一个而不是另一个?
来自文档:(方法path
:)
如果此 URL 对象包含文件 URL(由 isFileURL 确定),则此方法的返回值适合输入到 NSFileManager 或 NSPathUtilities 的方法中。
在我看来,这句话清楚地表明你应该在使用orpath
时使用。NSFileManager
NSPathUtilities
结论:
当您使用(通常)使用的远程 URLabsoluteString
时,否则结果不是您(通常)想要的。
当您使用本地 URL时,请使用path
.
来源:
http ://www.ietf.org/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc3986.txt
NSURL 类参考