【问题标题】:Why do people tend to store NSURL as NSString为什么人们倾向于将 NSURL 存储为 NSString
【发布时间】:2014-09-20 07:48:32
【问题描述】:

在整个互联网以及 SO 上,我都看到了与此类似的代码

NSString *imageUrl = [NSString stringWithFormat:@"%@",[info valueForKey:UIImagePickerControllerReferenceURL]];

然后

NSURL *url = [[NSURL alloc] initWithString:imageUrl];

为什么不只存储 NSURL?是因为优化吗? NSString 是不是存储成本更低?

【问题讨论】:

  • 存放在哪里?这两行代码在哪里?在不同的地方或相同的方法?
  • 任何使用第一行代码的人都疯了。它随时可能破裂。将NSURL 转换为NSString 的正确方法是使用absoluteString 方法,而不是stringWithFormst:
  • 坏习惯。 URL 或 URI 是结构化数据,NSURL 表达了这一点。字符串是一个字符数组。
  • @KatedralPillon 然后保留原来的NSURL。没有理由将 NSURL 转换为 NSString,除非您确实需要使用 URL 的 NSString 表示。
  • 谢谢大家,我会保留NSURL,因为似乎没有实现优化,除了作为url之外我不需要url。

标签: ios objective-c nsstring nsurl


【解决方案1】:

很多时候,这似乎不是空间问题(如果NSURL 不包含任何其他特定数据,则存储NSString 会更有效,但不会到在大多数应用程序中发挥作用)。

确实,将 URL 存储为字符串的最常见原因是我们自己认为 URL 的方式 - 只是字符串。

最后,最适用/最具体的选择通常是最好的——NSURL 表示“一个 URL,它可能包含远程服务器上资源的位置、磁盘上本地文件的路径,甚至是一个任意一段编码数据”(source),而NSString 仅表示一串文本——如果您要使用 URL,请使用 NSURL

NSString 的一个明显优势是它们更便携,但如果需要,NSURL 也可以序列化和移动!)。

【讨论】:

    【解决方案2】:

    NSString 被更普遍地使用。例如,AFNetworking 使用字符串而不是 NSURL。此外,如果您需要将此 URL 作为参数发送到 Web 服务器,则还需要字符串格式。

    延迟实例化只是 Obj-C 中的一个很好的实践。仅在需要时创建对象。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2012-04-05
      • 2012-02-10
      • 1970-01-01
      • 2018-01-26
      • 2014-10-11
      • 2016-04-07
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多