首页 文章

我何时应该使用NSURL而不是NSString,反之亦然?

提问于
浏览
9

这不是关于相关问题的问题 . 这是一个我试图加深对Objective-C或更具体的Cocoa Foundation的理解的问题 .

当处理从服务器上传和下载文件到我的应用程序时,我总是在使用 NSURLNSString 来解决所有与路径相关的问题 . 当然,当混淆了哪两个会更好的选择 .

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 回答

  • 8

    通常,对于与路径相关的操作,您应该首选 NSURL 而不是 NSString ,因为路径信息可以更有效地存储在 NSURL 中(根据 NSFileManager 的类引用) . 所以我建议您使用 NSURL .

    此外 NSURLURLByAppendingPathComponent:URLByAppendingPathExtension: 因此也提供了方便:-)

  • 4

    NSUrl 知道如何处理几乎任何网址王 - 不仅仅是网址,而是将其拆分为易于访问的块:

    • 协议或方案(http,ftp,telnet,ssh)

    • 用户名和密码(例如ssh:ssh:// user:password@host.domain.org)

    • 主机名

    • 端口

    • 路径

    • GET参数

    现在你可以轻松地向url-object询问这个块,而在字符串中可能需要过多的if规则或复杂的正则表达式 .

相关问题