在写代码的时候,如果要判断两个对象是否相等的话,你会很自然的写下 if(a == b) ...,而且几乎不会去考虑到这句代码的会出问题,这句代码真的不会出现问题吗?请看一下下面的代码:
上面的代码会输出什么呢?简单,输出
flag1:1
flag2:1
如果你觉得是输出这样的结果,请再认真看一下代码,其实,程序的真正输出是这样的:
——————————————————————————————————————————————————————————————————————————————————————————————————————
原因
在 OC 中,如果使用 == 将两个对象进行对比,那么其实就是简单地对两个指针进行对比,很明显,在上面的使用“==”的那句代码中,这样的对比并不能满足我们的需求,我们希望的是只要两个字符串如果相同的话,那么这两个字符串就应该是相等的,不在乎它们是不是处于同一块内存中。
上面的问题代码应该给我们这样的一个启示:
编写 OC 代码时,如果要判断两个对象是否“等同”,不要简单地使用“==”符号,而是应该使用具体对象所在的类所提供的判断“等同”的方法。