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 *...

NSStringCompareOptions

typedef NS_OPTIONS(NSUInteger, NSStringCompareOptions) {     NSCaseInsensitiveSearch = 1,     NSLi...

iOS开发笔记- NSStringCompareOptions 使用

传入 NSStringCompareOptions 枚举的值 enum{     NSCaseInsensitiveSearch = 1,//不区分大小写比较     NSLiter...

NSString方法compare详解

传入一个需要比较的字符串。 例如 [value compare:@"********"] ,返回 NSOrderedSame。 options:(NSStringCompareO...
  • muyu114
  • muyu114
  • 2012年05月30日 14:03
  • 12154

objective-c之NSString

NSString在前面已经说过是,是Cocoa中用来处理字符串的类。下面就是NSString的一些常用方法及操作:  创建字符串 NSString的stringWithFormat:方法就是通...

NSString字符串比较

NSString字符串比较 比较字符串  我想你很快就会在程序中需要比较两个字符串是否相等。在C中,你知道可以使用strcmp(string1,string2)函数:  ch...

iOS开发陷阱之NSString - compare

今天调试程序的时候发现一个不应该进去的比较判断进去了,查看内存发现NString的值为nil进行compare比较居然返回NSOrderSame,于是想记载一下,上网查发现已经有前辈写了,故偷懒,转载...

iOS compare字符串比较

例如  1、 NSString *value = @"123AAAAAAA"; [value compare:@"123AAAAAAA"],返回 NSOrderedSame。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSString的compare方法注意事项
举报原因:
原因补充:

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