这不是关于相关问题的问题。这是一个我试图加深对Objective-C或更具体的Cocoa Foundation的理解的问题。
在处理从服务器上传和下载文件到我的应用程序时,我经常使用NSURL
或NSString
来解决与路径相关的所有问题。当然,当有现有的API时,我只是根据规格使用它。但是当我存储自己的路径或创建处理它们的自定义类时,我很困惑这两个中哪一个会更好。
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呢?
如果有人对您自己的处理文件路径和远程网址的类使用NSURL而不是NSString有更深入的了解,请分享!欢呼声。
答案 0 :(得分:8)
NSUrl
知道如何处理几乎任何网址王 - 不仅仅是网址,而是将其拆分为易于访问的块:
现在你可以轻松地向url-object询问这个块,而在字符串中可能需要过多的if规则或复杂的正则表达式。
答案 1 :(得分:4)
通常,对于与路径相关的操作,您应该优先NSURL
而不是NSString
,因为路径信息可以更有效地存储在NSURL
中(根据NSFileManager
的类引用) 。因此,我建议您使用NSURL
。
此外NSURL
还有URLByAppendingPathComponent:
和URLByAppendingPathExtension:
,因此也很方便: - )