NSString: isEqual vs. isEqualToString

后端 未结 5 733
攒了一身酷
攒了一身酷 2020-11-28 06:36

What is the difference between isEqual: and isEqualToString:?

Why are classes adding isEqualTo* methods (isEqualToArray for NSArray, isEqua

相关标签:
5条回答
  • 2020-11-28 06:45

    Expanding on @Abizern and @Jonathan Dann answers, both isEqual and isEqualToString work with nil values.

    - (void)testStringEqual {
        NSString *string = nil;
    
        STAssertFalse([string isEqual:@"test"], @"NSString isEqual");
        STAssertFalse([string isEqualToString:@"test"], @"NSString isEqualToString");
    
        // Note that these both return NO
        STAssertFalse([string isEqual:nil], @"NSString isEqual");
        STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString");
    
        string = @"test";
    
        STAssertTrue([string isEqual:@"test"], @"NSString isEqual");
        STAssertTrue([string isEqualToString:@"test"], @"NSString isEqualToString");
    
        STAssertFalse([string isEqual:nil], @"NSString isEqual");
        STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString");
    }
    
    0 讨论(0)
  • 2020-11-28 06:46

    I highly recommend this. The performance benefits of isEqualToString are basically negligible for most applications. But there are two other distinctions the author mentions:

    • Type safety
    • The way nil is handled
    0 讨论(0)
  • 2020-11-28 06:49

    Also, for writing your own -isEqual: and -isEqualTo<Class>: methods, the convention is to allow nil arguments for -isEqual: and raise an exception for nil arguments to -isEqualTo<Class>:

    0 讨论(0)
  • 2020-11-28 06:54

    isEqual: compares a string to an object, and will return NO if the object is not a string. isEqualToString: is faster if you know both objects are strings, as the documentation states:

    Special Considerations

    When you know both objects are strings, this method is a faster way to check equality than isEqual:.

    isEqualTo<Class> is used to provide specific checks for equality. For instance; isEqualToArray: checks that the arrays contain an equal number of objects, and that the objects at a given index return YES for the isEqual: test.

    0 讨论(0)
  • 2020-11-28 07:10

    My guess is that it provides a slight performance enhancement, as isEqualToString: won't have to type-check what's passed in.

    0 讨论(0)
提交回复
热议问题