Как найти строку в NSArray?

Существует много ответов здесь о том, почему компилятор, который позволяет Вам скрыть функцию членства тихо , является плохой идеей. Но никакой современный компилятор тихо не скрывает функции членства. Даже в C++, где позволяется сделать так, всегда существует предупреждение об этом, и это должно быть достаточно.

Итак, почему требуют, "повторно представляют"? Главная причина состоит в том, что это - вид ошибки, которая может на самом деле появиться случайно, когда Вы не смотрите на предупреждения компилятора больше. Например, скажем, Вы наследовались TComponent, и разработчики Дельфи добавляют новую виртуальную функцию к TComponent. Плохие новости являются Вашим полученным компонентом, который Вы записали пять лет назад и распределили другим, уже имеет функцию с тем именем.

, Если компилятор просто признал, что ситуация, некоторый конечный пользователь мог бы перекомпилировать Ваш компонент, проигнорировать предупреждение. Странные вещи произошли бы, и Вы обвинить. Это требует, чтобы они явно признали, что функция не является той же функцией.

18
задан Alex Rozanski 28 November 2009 в 18:06
поделиться

2 ответа

You want the indexOfObject: method, which looks for the object by sending each object in the array an isEqual: message.

50
ответ дан 30 November 2019 в 05:51
поделиться

Peter's answer is correct.

One additional note; if you have tons and tons of strings in the array, -indexOfObject: is going to do a linear search. This may prove to be a performance bottleneck for which you should consider using a different container; an NSSet or NSDictionary, possibly (depending on what the strings mean).

Another gotcha is if the strings are all relatively similar and/or relatively long.

Of course, don't bother optimizing anything until you have used the analysis tools to prove that you have a performance issue.

13
ответ дан 30 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: