通过选择器比较两个字符串:意外结果

时间:2012-07-13 20:31:43

标签: objective-c automatic-ref-counting selector

我正在练习如何在Objective-C中使用选择器 在这段代码中,我试图比较两个字符串:

int main (int argc, const char * argv[])
{
    @autoreleasepool
    {
        SEL selector= @selector(caseInsensitiveCompare:);
        NSString* str1=@"hello";
        NSString* str2=@"hello";
        id result=[str1 performSelector: selector withObject: str2];
        NSLog(@"%d",[result boolValue]);
    }
    return 0;
}

但它打印为零。为什么?

编辑:
如果我将str2更改为@“hell”,我会得到一个EXC_BAD_ACCESS。

2 个答案:

答案 0 :(得分:6)

performSelector:状态的文档"对于返回除对象以外的任何内容的方法,请使用NSInvocation"。由于caseInsensitiveCompare:返回{{1}而不是一个对象,你需要创建一个NSInvocation,这是更多的参与。

NSInteger

答案 1 :(得分:1)

NSString* str1=@"hello";
NSString* str2=@"hello";

if ([str1 caseInsensitiveCompare:str2] == NSOrderedSame)
            NSLog(@"%@==%@",str1,str2);
else
            NSLog(@"%@!=%@",str1,str2);