compare方法
来源:互联网 发布:js数组find方法举例 编辑:程序博客网 时间:2024/05/01 00:56
NSInteger (^block2) (NSArray *,NSString *) = ^(NSArray *a1, NSString *b1) {
if ([a1 containsObject:b1]) {
for (NSInteger i =0; i < a1.count; i++) {
if ([a1[i] compare:b1]) {
return i;
}
}
}
return -1L;
};
NSArray *a2 =@[@"qwe", @"asd",@"zzz"];
NSString *b3 = @"zzz";
NSLog(@"%ld", block2(a2, b3));
if ([a1 containsObject:b1]) {
for (NSInteger i =0; i < a1.count; i++) {
if ([a1[i] compare:b1]) {
return i;
}
}
}
return -1L;
};
NSArray *a2 =@[@"qwe", @"asd",@"zzz"];
NSString *b3 = @"zzz";
NSLog(@"%ld", block2(a2, b3));
这里的compare方法不只是nsstring有, 还有nsnumber也有, 当系统不知道从里面取出的类型是什么时默认是使用nsnumber
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 }
0 0
- compare方法
- compare()方法+使用compare方法
- Compare方法出错
- Compare方法出错
- C# string.Compare()方法
- NSNumber中的compare方法
- compare()与compareTo()方法
- NSString方法compare详解
- NSString方法compare详解
- NSString方法compare详解
- NSString方法compare详解
- NSString compare方法详解
- NSString方法compare详解
- compareTo方法和compare方法
- java 学习关于compare方法
- std::string的compare方法
- beyond compare 命令行调用方法
- NSString的compare方法注意事项
- 【连载】软件工程大型项目实训纪实
- GCD学习 Main Dispatch Queue/Global Dispatch Queue
- 单链表 错误找不出来
- svn for mac 无法记住密码
- centos6安装中文输入法
- compare方法
- JSP+JavaBean连接数据库时无法读取表中内容
- windows下搭建node.js及npm的工作环境
- n个元素进栈,出栈顺序问题
- SDUT 2482 二叉排序树
- php升级到5.3 localhost 不能链接mysql
- 计算机网络和因特网
- Hadoop数据传输工具sqoop(一)简介
- 同一服务器上不同的request请求为什么能取得相同的Session对象