3

我想知道哪一个对于测试 iOS 7.0+ 的非空 NSString 最快。
注意:要测试的字符串 99% 的时间是 2 到 100 个字符长度。

if ([foo length] > 0)

或者

if ([foo isEqualToString:@""] == NO && foo != nil)

我认为这取决于是isEqualToString:先比较长度(在这种情况下第一种方法更快)还是isEqualToString:先比较字符串的第一个字符(在这种情况下第二种方法可能更快)。

ps:我已经知道isEqualToString:is 快于isEqual:which is 本身快于compare:.

4

2 回答 2

4

测量一下看看。

严重地。你不应该优化这样的东西,除非你能看到它实际上是一个性能瓶颈(这不太可能)。如果仪器(使用时间分析器)告诉您这是一个问题,那么正确的方法是衡量您的假设。

生成 n 百万个随机字符串,使用选项 A 对代码进行计时,然后使用选项 B 并选择最快的。

于 2012-08-30T08:39:25.333 回答
2

简单地测试长度会快很多倍(在我测试的系统上)。

当然,您依赖于框架实现。

您可能会考虑一个可以提高可读性的功能,如果“快速方式”发生变化,您将只有 2 行需要更改。


在下面的评论中,我建议使用常量/奇异/唯一字符串进行比较是最快的。

  • isEqualToString:仅72 岁
  • 22.6s总是测试length
  • 15.6s 指针比较,否则测试length(测试中的一半元素匹配常量)。如果您的集合的某些空字符串是常量,但有些不是常量,这将适用。可以根据集合中常数的分布而变化。
  • 4.6 仅指针比较

使用指针比较比测试长度快 5 倍,比isEqualToString:. 当然,您可能需要在创建数组时增加一些开销,以确保所有空字符串都是常量。

于 2012-08-30T09:02:34.887 回答