Есть ли разница между сравнением NSString: и isEqual (ToString) :? - PullRequest
7 голосов
/ 21 мая 2010

Иногда я нахожу код, который проверяет, совпадают ли два NSString с:

if ([str1 compare:str2] == NSOrderedSame) {
    // Do something
}

Теперь я считаю, что это менее читабельно, чем использование isEqualToString:, и у него также есть некоторые неприятные побочные эффекты, например, если str1 == nil if (..) оценивается как true, или когда str2 == nil хаос может сорваться на нас в соответствии с Apple документов. ( Редактировать : Как указывает хетфинч, если str1 == nil && str2 == nil оба варианта дают неправильный результат. Поэтому вам все равно нужно защититься от этого случая).

Но перед тем, как я начну бороться с этими утверждениями в коде моей компании, я хотел убедиться, что не пропустил какой-то важный момент.

Итак, мой вопрос сводится к следующему: есть ли разница между compare: до NSOrderedSame и isEqual:?

1 Ответ

12 голосов
/ 21 мая 2010

Читая документы, я могу обнаружить только те различия, о которых вы еще не упомянули:

  1. isEqualToString: сначала сравнивает id двух строк, что является потенциальным увеличением скорости в приложении, в котором часто используются строки. Из ссылки NSString:

    Возвращаемое значение:
    ДА, если aString эквивалентен получателю (если у них одинаковый идентификатор или если они NSOrderedSame в буквальном сравнении), в противном случае НЕТ.

  2. isEqualToString: действительно более аналогичен compare: options:NSLiteralSearch, как видно из приведенной выше цитаты. NSLiteralSearch более привередлив в представлении символов Unicode:

    «Литерал» при применении к сравнению строк означает, что различные правила декомпозиции Unicode не применяются, а символы Unicode сравниваются по отдельности. Так, например, «Ö», представленный в виде составленной последовательности символов «O», и умлаут не будут сравниваться равными «Ö», представленными как один символ Unicode.

Это действительно просто придирки по сравнению с ложными срабатываниями и неопределенным поведением, упомянутыми в вашем вопросе.

Источник: Ссылка класса NSString

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...