在Objective-C中的字符串比较与类比较

Osp*_*pho 3 iphone objective-c objective-c++ cocos2d-iphone game-loop

我正在编写一个Objective-C游戏,我正处于我应该开始在游戏循环中优化我的一些代码的阶段.
我使用了大量的类比较方法,

if([obj isMemberOfClass:[SomeClass class]])


我听说这种检查是相当昂贵的,因为我只选择有1个阵列填充了多个类,我需要某种类的检查.
我想也许在NSObject子类化NSObject中添加一个属性来包含一个字符串属性,在初始化过程中我将使该等特定子类的类名等于.然后干脆做一个

if([obj.klass isEqualTo:@"SomeClass"])

这会有益吗?
我试图尽可能多地保持游戏循环中的动态编码.

谢谢!

Lea*_*s2D 10

简答:不.与比较(或:分类,分类)对象的其他方法相比,字符串比较过于昂贵.

答案很长:不要优化你没有分析,测量和比较的东西.在开始优化之前,您真正想要做的是清楚了解应用程序的行为方式以及性能瓶颈.您尝试的更改不太可能导致性能发生任何明显变化,因此我建议首先找到真正的瓶颈.

在这种特殊情况下,如果测试失败,发送isEqual到NSString比isMemberOfClass慢4倍.这样的条件测试大部分时间都会失败,这就是为什么你应该忽略测试成功的结果.

成功的字符串比较很快,因为它是一个简单的指针比较,如果两个字符串相等,它们很可能指向相同的内存地址.如果它们不相等,则可能通过使用哈希方法比较字符串中的每个字符是否相等.

以下是我添加到性能测试项目中的对象比较测试的结果.您可以使用该项目进行进一步测试.

在此输入图像描述