NSString的compare方法注意事项
2015-07-08 11:19
274 查看
NSString有多个compare相关方法:
NSComparisonResult 是定义的一个枚举,定义如下:
其中,NSOrderedSame 表示比较的两个字符串完全一致, 同时,在这个枚举中,它的值是 0.
字符串比较在程序中很常见,比如:
但,如果如上中的str1为nil,根据Objective-C的消息调用规则(方法调用),对nil发送的任何消息,得到的返回都是nil。这样的情况下,运行时是不会像C/C++那样,出现空指针的非法访问而使得程序强行终止。也就是说,在Objective-C下面,即便str1为nil,也不会造成程序崩溃,而是会继续运行。
那么当str1为空的时候,[str1 compare:@"some text"] 消息的返回就会为nil。nil表示一个空的Objective-C对象,实际就是表示一个空指针,而它代表的值就是0,与NSOrderedSame的值相等. 如此,回到最前面的if语句,如果str1为nil,那么整个语句的值为真。这会给程序造成非常严重的问题,小则逻辑错误,UI显示错误等,大则会造成数据泄漏等等。。。所以,一旦出现这种情况,还是很严重的。
笔者个人建议,以上代码至少应该写为:
- (NSComparisonResult)compare:(NSString *)string; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;
NSComparisonResult 是定义的一个枚举,定义如下:
typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
其中,NSOrderedSame 表示比较的两个字符串完全一致, 同时,在这个枚举中,它的值是 0.
字符串比较在程序中很常见,比如:
if ([str1 compare:@"some text"] == NSOrderedSame) { // Do something } else { // Do something else }
但,如果如上中的str1为nil,根据Objective-C的消息调用规则(方法调用),对nil发送的任何消息,得到的返回都是nil。这样的情况下,运行时是不会像C/C++那样,出现空指针的非法访问而使得程序强行终止。也就是说,在Objective-C下面,即便str1为nil,也不会造成程序崩溃,而是会继续运行。
那么当str1为空的时候,[str1 compare:@"some text"] 消息的返回就会为nil。nil表示一个空的Objective-C对象,实际就是表示一个空指针,而它代表的值就是0,与NSOrderedSame的值相等. 如此,回到最前面的if语句,如果str1为nil,那么整个语句的值为真。这会给程序造成非常严重的问题,小则逻辑错误,UI显示错误等,大则会造成数据泄漏等等。。。所以,一旦出现这种情况,还是很严重的。
笔者个人建议,以上代码至少应该写为:
if (str1!=nil && [str1 compare:@"some text"] == NSOrderedSame) { // Do something } else { // Do something else }
转自:http://www.cnblogs.com/xinus/archive/2013/01/26/ios-dev-traps-nsstring-compare.html
相关文章推荐
- javascript获取重复次数最多的字符
- CentOS查看线程、硬盘、内存、cpu、网卡
- Android PowerImageView实现,可以播放动画的强大ImageView
- 解决 declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" 报错
- 011 Complaint
- 全透明状态栏,导航栏
- Python下opencv使用笔记(三)(图像的几何变换)
- CSS之 :before && :after
- 快速搭建FTP服务器 by:http://cyr520.blog.51cto.com
- python友情链接检查方法
- 织梦dedecms — 调用第一张原图
- 操作系统的内核
- 二叉树 已知中序 后序 求前序
- iOS下使用FFMPEG的一些总结
- html css文件宏观调控-外部样式表
- ajax跨域和anglarjs跨域
- Simpler is Better
- Linux内核驱动之GPIO子系统
- 各种远程通信协议分析、比较
- Lichee (五岁以下儿童) sysconfig1.fex 配置系统