Objective c 什么时候应该使用NSURL而不是NSString,反之亦然?
这不是一个有关相关问题的问题。这是一个问题,我试图加深对Objto-C或更具体的可可基金会的理解。 在处理从服务器上传和下载文件到我的应用程序时,我总是在使用Objective c 什么时候应该使用NSURL而不是NSString,反之亦然?,objective-c,cocoa-touch,cocoa,nsstring,nsurl,Objective C,Cocoa Touch,Cocoa,Nsstring,Nsurl,这不是一个有关相关问题的问题。这是一个问题,我试图加深对Objto-C或更具体的可可基金会的理解。 在处理从服务器上传和下载文件到我的应用程序时,我总是在使用NSURL或NSString处理所有与路径相关的事情之间左右为难。当然,当有一个现有的API时,我只是根据规范使用它。但当我存储自己的路径或创建处理它们的自定义类时,我不知道这两个选项中哪一个更好 NSString在任何地方都可以使用,它有一些方便的方法,如stringByAppendingPathComponent:和stringByAp
NSURL
或NSString
处理所有与路径相关的事情之间左右为难。当然,当有一个现有的API时,我只是根据规范使用它。但当我存储自己的路径或创建处理它们的自定义类时,我不知道这两个选项中哪一个更好
NSString
在任何地方都可以使用,它有一些方便的方法,如stringByAppendingPathComponent:
和stringByAppendingPathExtension:
。通过使用[nsurlwithstring:@“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);
为什么我会选择使用一个而不是另一个,特别是当两者之间的转换如此容易时?为什么苹果要为使用这两种数据类型而创建几乎相同的API呢
如果有人对何时使用NSURL而不是NSString来处理文件路径和远程URL有更深入的了解,请分享!干杯。通常,对于路径相关操作,您应该更喜欢
NSURL
而不是NSString
,因为路径信息可以更有效地存储在NSURL
中(根据NSFileManager
的类参考)。因此,我建议您在API中也使用NSURL
此外,
NSURL
还具有URLByAppendingPathComponent:
和URLByAppendingPathExtension:
因此也提供了便利:-)NSURL
知道如何处理几乎所有URL,而不仅仅是Web地址并将其拆分为易于访问的区块:
- 协议或方案(http、ftp、telnet、ssh)
- 用户名和密码(例如ssh:ssh://user:password@(host.domain.org)
- 主机名
- 港口
- 路径
- 获取参数
现在,您可以轻松地向url对象询问这些区块,而在字符串中可能需要过多的if规则或复杂的正则表达式。+1此外,即将推出的Mac App Store沙箱规则需要权限,而权限(据我所知)存储在NSURL本身中,使归档文件系统访问更容易,以备日后使用。我认为,在所有其他条件相同的情况下,使用NSURL API的一个主要理由是它们不是NSSTRING。很容易混淆相同类型的内容,而且NSURL的使用频率比NSSTRING少得多。考虑:
[fm copyItemAtPath:name…]
将编译,但无法工作,因为您可能需要[fm copyItemAtPath:path…]
。感谢您的澄清,+1。我必须选择给谁打标记,@rapaudierend在那里有引用。当引用本地文件系统上的文件时呢?你是什么意思NSURL
有一个。NSString也有一个。似乎NSURL通常是首选的,但我想知道它是否也适用于本地文件。就我自己而言,我只是求助于使用NSURL
,除非我绝对需要使用NSString
,比如在处理大量NSFileManager
的API时。我想没有标准的答案。