Константы Objective-C: сравнение строк NSS с использованием ==? - PullRequest
4 голосов
/ 24 января 2012

Обсуждения, которые я нашел по поводу установки констант NSString, заставили меня написать код следующим образом:

.h файл:

extern NSString * const kSectionHeaders;

.m файл:

NSString * const kSectionHeaders = @"header";

Во время работы программы она должна проверять слова из текстового файла по ряду констант NSString.

Я читаю сравнение памяти должно работать при настройке функции, как указано выше:

if (property == kSectionHeaders) {...}

Не работает жестко :( Следующие работы, но это было описано как плохое решение (медленнее, что еще?):

if ([property isEqualToString:kSectionHeaders]){...}

Я чувствую, что сделал что-то не так. Но не вижу что! Пожалуйста помоги :-) Спасибо! J.

Ответы [ 3 ]

7 голосов
/ 24 января 2012

== делает указатель сравнения, он не будет сравнивать значения двух объектов. isEqualToString: (и вообще isEqual:) - это правильный способ сделать это - где это было названо «плохим решением»?

5 голосов
/ 24 января 2012

Помните, что имена переменных - это просто указатели на объекты в памяти.

Операнд == сравнивает указатели. Это не будет правдой, если не будет сравнивать один и тот же объект в памяти.

isEqualToString: - ваша лучшая ставка. Не беспокойся о скорости. Устройства достаточно быстры, чтобы сделать сравнение в мгновение ока. Вещи, которые действительно требуют заметного времени, рисуют на экране и читают с диска.

3 голосов
/ 24 января 2012

Кто назвал это плохим решением?Это единственное правильное / правильное решение проблемы.

...