UrlByAppendingPathComponent与UrlByAppendingPathExtension

时间:2012-05-01 21:22:24

标签: objective-c ios ios5

我已经阅读了文档,看起来有些边缘情况可能不同(尾部斜线等),但我不清楚这两种方法之间的主要区别是什么。组件和扩展术语在URL世界中是否具有特殊含义,除了我以外的其他人理解?

2 个答案:

答案 0 :(得分:17)

路径扩展名用于向网址添加.html之类的内容,路径组件用于添加/news/local之类的内容。路径扩展的文档:

  

如果原始网址以一个或多个正斜杠结尾,则会从返回的网址中删除这些正斜杠。在新URL的两个部分之间插入句点。

因此http://hello.com/news/将成为http://hello.com/news.html

路径组件的文档:

  

如果原始URL没有以正斜杠结尾且pathComponent不以正斜杠开头,则在返回的URL的两个部分之间插入正斜杠,除非原始URL是空字符串。

因此http://hello.com/news/将成为http://hello.com/news/html

这是一个快速测试:

NSURL *originalURL = [NSURL URLWithString:@"http://hello.com/news"];
NSLog(@"%@", [originalURL URLByAppendingPathComponent:@"local"]);
NSLog(@"%@", [originalURL URLByAppendingPathExtension:@"local"]);

输出:

http://hello.com/news/local
http://hello.com/news.local

答案 1 :(得分:3)

每当我对这样的事情有疑问,并且文档没有帮助时,我只是在逻辑测试中测试它。

NSURL *baseURL = [NSURL URLWithString:@"http://foo.com/bar/baz"];
NSURL *appendExtension = [baseURL URLByAppendingPathExtension:@"qux"];
NSURL *appendComponent = [baseURL URLByAppendingPathComponent:@"qux"];

STAssertEqualObjects([appendExtension absoluteString], @"http://foo.com/bar/baz.qux", nil);
STAssertEqualObjects([appendComponent absoluteString], @"http://foo.com/bar/baz/qux", nil);

所以它是,扩展名是。(文件类型)那里的组件是/(目录)。