在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码
if (activityType == @"0"){}
然后你会得到这样一行黄色提醒
Fixing “direct comparison of a string literal has undefined behavior”
原因在于
-
== :比较的是指针指向的地址,OC中的对象都是用指针表示的,但在这里并不能保证activityType 与0 相等
那么很自然可以想到使用用isEqual 或isEqualToString 方法,这两者也是有区别的:
-
isEqual :NSObject 方法,官方文档是这样写的
Returns a Boolean value that indicates whether the receiver and a given object are equal.
返回一个bool值判断两个对象是否相等
如果两个对象是相等的,那么他们必须有相同的哈希值
-
isEqualToString :NSString 方法,而NSString 是继承自NSObject 的,所以isEqualToString 应该是isEqual 的衍生方法,是对isEqual 的细分,它的官方文档是这样写的
Returns a Boolean value that indicates whether a given string is equal to the receiver using a literal Unicode-based comparison.
返回一个bool值判断给出的字符串是否与已有的Unicode字符相同
如果知道了两个对象都是字符串,isEqualToString 比isEqual 要快
所以以上代码应该写成
if (activityType isEqualToString @"0"){}
文/sealband(简书作者) 原文链接:http://www.jianshu.com/p/2e70a7430362 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
|
请发表评论