高效的Objective C对象Switch语句的替代方案

3
我有一个函数,它需要接收一个NSString和一个int参数,然后使用switch语句来返回计算出的值,例如根据提供的NSString乘以某个常数得到int值。
显然,在Objective-C中,switch语句不能用于对象。那么最快的替代方案是什么?是if-else语句吗?还是有更加优雅的方法?
编辑
我关心性能的原因是我正在修改用户观看的UI元素,这些计算的最终结果会直接影响用户体验,我不希望界面感到迟缓。

4
感觉萎靡不振?我怀疑你是否能感受到使用switch块或if-else块之间的区别。 - JavaSheriff
2
只要计算总时间不超过几十毫秒,人类就不会注意到延迟。在你有证据表明你的代码不够快(或者证明你的代码效率低下会对电池寿命产生不利影响)之前,不要担心速度。 - user57368
2个回答

15
不要过早优化。只需创建一个NSDictionary,将每个字符串映射到其倍增器。然后查看是否足够快。 如果您需要根据字符串执行不同的操作,请使字典中的每个值成为执行适当操作的块。

6
“不要过早优化”始终是一个好的建议。 - ThomasW
1
此外,不要自以为知道应用程序为什么感觉缓慢(如果它不感觉缓慢,那你为什么还担心呢?)。始终使用苹果提供的工具对其进行分析。 - sosborn
我认为这是一个相当好的猜测,它不是if语句/字典查找。 - Wevah

3
我关心性能的原因是我正在修改用户正在观察的UI元素,这些计算的最终结果,并且我不希望它感觉迟缓。
所以...你正在进行涉及重新布局和重绘大量内容的GUI操作,并且你担心if/else语句的性能吗?
应用程序中的图形操作是CPU周期的巨大消耗者。响应于图形更改的绘制将消耗比例如字典查找所需的调用objectForKey: 和调用hash (这是一个字典查找所暗示的) 更多的周期。
测量应用程序的性能。找出为什么它迟钝。然后解决问题。
第一步应该使用CPU采样工具查看这些周期去了哪里。
如果那没有帮助,请使用各种图形性能分析工具来查看是否存在瓶颈。
也很容易发现,您正在多次执行需要仅执行一次的操作;也许您的用户交互跟踪代码导致UI被多次重新布局,而它只需要执行一次(我刚刚在我正在开发的应用程序中解决了这种性能问题)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接