这不是关于相关问题的问题 . 这是一个我试图加深对Objective-C或更具体的Cocoa Foundation的理解的问题 .
当处理从服务器上传和下载文件到我的应用程序时,我总是在使用 NSURL
或 NSString
来解决所有与路径相关的问题 . 当然,当混淆了哪两个会更好的选择 .
NSString
在任何地方都使用,它有方便的方法,如 stringByAppendingPathComponent:
和 stringByAppendingPathExtension:
. 我可以通过使用 [NSURL URLWithString:@"string"]
创建一个新实例,然后通过在NSURL实例上调用 [url path]
来轻松转换为NSURL . 但差异是有原因的,对吧?
当我查看像NSFileManager这样的头文件时,我的困惑就会增加 . 这两种方法非常接近:
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError **)error NS_AVAILABLE(10_6, 4_0);
为什么我会选择使用一个而不是另一个,特别是当两者之间的转换如此容易时?为什么Apple要为使用这两种数据类型创建几乎相同的API?
如果有人对您自己的类处理文件路径和远程URL使用NSURL而不是NSString有更深入的了解,请分享!干杯 .
2 回答
通常,对于与路径相关的操作,您应该首选
NSURL
而不是NSString
,因为路径信息可以更有效地存储在NSURL
中(根据NSFileManager
的类引用) . 所以我建议您使用NSURL
.此外
NSURL
有URLByAppendingPathComponent:
和URLByAppendingPathExtension:
因此也提供了方便:-)NSUrl
知道如何处理几乎任何网址王 - 不仅仅是网址,而是将其拆分为易于访问的块:协议或方案(http,ftp,telnet,ssh)
用户名和密码(例如ssh:ssh:// user:password@host.domain.org)
主机名
端口
路径
GET参数
现在你可以轻松地向url-object询问这个块,而在字符串中可能需要过多的if规则或复杂的正则表达式 .