NSString的compare方法注意事项

转载 2015年07月08日 11:19:13

NSString有多个compare相关方法:

- (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

NSStringCompareOptions

NSCaseInsensitiveSearch = 1,     NSLiteralSearch = 2, /* Exact character-by-character equivalence *...
  • oqqQuZi1234567
  • oqqQuZi1234567
  • 2014年05月09日 11:39
  • 6910

iOS开发笔记- NSStringCompareOptions 使用

传入 NSStringCompareOptions 枚举的值 enum{     NSCaseInsensitiveSearch = 1,//不区分大小写比较     NSLiter...
  • jp940110jpjp
  • jp940110jpjp
  • 2015年12月23日 10:07
  • 926

Objective—C中的排序及Compare陷阱

campare陷阱 NSString有多个compare相关方法: - (NSComparisonResult)compare:(NSString *)string; - (NSComparisonR...
  • u011883764
  • u011883764
  • 2014年08月27日 12:11
  • 2430

使用sortedArrayUsingSelector:方法排序数组中的元素

使用sortedArrayUsingSelector:方法排序数组中的元素
  • ShengQiangLiu
  • ShengQiangLiu
  • 2014年07月18日 07:53
  • 4673

OC NSString字符串比较

/*     比较两个字符串:- (NSComparisonResult)compare:(NSString *)string;       返回值是枚举:NSOrderedAscending ...
  • perfect_app
  • perfect_app
  • 2016年03月26日 22:01
  • 2159

NSString (API+常用实例)

//初始化     NSString* str = [NSString stringWithFormat:@"asdfsdfvvvvvvvas"];     NSString* str2 = @...
  • Jason_chen13
  • Jason_chen13
  • 2015年12月07日 17:06
  • 699

如何在Beyond Compare合并文本时设置对齐方式

Beyond Compare是一款好用的文本合并工具,软件自设合并浏览器支持将一个文件或文件夹的两个不同版本进行变更合并,生成一个输出。其中颜色编码和部分高亮显示允许您简单、快速地接受、拒绝以及合并变...
  • mathsoftware
  • mathsoftware
  • 2016年11月11日 10:04
  • 870

C++中compare函数的使用

compare函数用来进行字符串以及其子串的比较,示例如下: #include #include #include using std::cout; using std::endl; using...
  • u010142437
  • u010142437
  • 2014年06月13日 09:48
  • 15106

java String对象中‘==’,equals与compareTo函数的使用和区别

java String类中可能最让初学者容易混淆的li
  • xiongyangg
  • xiongyangg
  • 2014年10月10日 21:31
  • 1837

怎么轻松搞定Beyond Compare文件乱码问题

Beyond Compare文件乱码对于新手小白来说一直是一个比较棘手的难题,下面就详细介绍Beyond Compare文件乱码的各种解决方案,记得收藏与点赞! 一些在项目文档中可以显示的常规文本,用...
  • mathsoftware
  • mathsoftware
  • 2016年11月07日 09:59
  • 4458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSString的compare方法注意事项
举报原因:
原因补充:

(最多只允许输入30个字)