2013-05-04 2 views
0

Сравнение строк может быть дорогостоящим. Существует некоторая статистика, плавающая вокруг, которая говорит, что очень высокий процент сравнения строк можно устранить, сначала сравнив размеры строк. Поэтому мне любопытно узнать, учитывает ли это метод сравнения NSString:. Кто-нибудь знает?Эффективность сравнения NSString

ответ

2

Согласно источникам here (это только одна реализация, другие могут действовать по-другому), compare не проверяет длину сначала, что на самом деле имеет смысл, поскольку это не проверка равенства. Поскольку он возвращает код возврата менее или равный/больше, чем код возврата, то имеет, чтобы проверить символы, даже если длины одинаковы.

Метод чистого isEqual -type может иметь возможность сочетать символы, если длины отличаются друг от друга, но compare не имеет такой роскоши.

Он выполняет определенные проверки длины против нуля, но не сравнивает две длины друг с другом.

+0

Эти источники не те, что используются в OSX, но ваша точка по-прежнему хорошая –

+0

@paxdiablo Интересный ресурс. Также стоит отметить, что isEqualToString: делает эту проверку в первую очередь. – stephen

1

Да, так оно и есть. Он также проверяет равенство указателя перед этим (которое охватывает случай строковой строки и некоторые другие из-за строкового uniquing и строкового ПЗУ).

(изменить) Этот ответ применяется к -isEqualToString :, not -compare :. I неверно прочитано

+0

Есть ли какая-либо документация для подтверждения этой претензии? – stephen

+0

@stephen Проверьте источник CFStringRef на сайте opensource.apple.com. Хотя «NSString» является кластером классов, скорее всего, вы собираетесь использовать эту реализацию. – JustSid

+0

Существует источник CFString, который является OSS. Однако это не распространяется на все реализации NSString; вам нужно будет разобрать Foundation для них (Hopper - хороший инструмент для этого). –

Смежные вопросы