Objective-C中 ==、isEqual、isEqualToString判断字符串相等
2016-03-17 14:37
661 查看
在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码
if (activityType == @"0"){} //activityType是某一个变量名然后你会得到这样一行黄色提醒
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"){}总结:isEqual比较的是hash返回的值,而==只是简单的内存地址比较,大部份情况==为YES的,isEqual也为YES,如果isEqual为YES的不一定==也为YES。[/code]
相关文章推荐
- 转载_理解 Objective-C Runtime
- JSON: Python Objects与String之间转换【json.dumps把python任意数据类型转换成字符串,json.loads把字符串转换为unicode编码】
- JSONObject和JSONArray的使用
- RPL objective function & simulation using DGRM model in cooja
- Qt MetaObject System详解
- BOOST内存管理(一) --- boost::object_pool
- 关于Object.clone克隆方法的测试
- object-c 的runtime.h
- Objective-C 中的 instancetype 和 id 关键字
- Selective Search for Object Recognition
- 在Tamarin中 3D Touch 的使用
- Object-C基础-02-第一个OC的类
- Object-C基础-03-点语法
- Object-C基础-04-自定义构造方法和description方法
- Object-C基础-05-self关键字
- Object-C基础-06-空指针和野指针
- Objective-C中的instancetype和id区别
- 查找共享库路径是失败,“cannot open shared object file: No such file or directory”解决方法
- 两个Hacker,专门Patch TObject
- 动态实现Objective-C中属性(Property)的方法