Статическая строка-> отображение строки - PullRequest
2 голосов
/ 29 марта 2012

Мне нужно отображение строки-> строки во время выполнения (подумайте NSDictionary), за исключением того, что отображение НИКОГДА не изменится после сборки.

Наивное решение - просто использовать NSDictionary, но должен быть более оптимальный способ сделать это, не так ли?

Оптимально в том смысле, что если отображение известно во время компиляции и известно, что оно никогда не изменится, компилятор сможетсделать отображение во время компиляции.NSDictionary должен выполнить поиск хеша во время выполнения.Я знаю, что это постоянное время, но мне кажется, что оно немного "нечисто" ...

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Вы можете жестко закодировать ваш NSDictionary, если это не слишком громоздко (то есть, оно не слишком велико), или вы можете создать plist и включить его в свой пакет приложений. Затем при запуске приложения прочитайте словарь из plist (пара строк кода). Каждый из этих подходов требует примерно одинаковых усилий. Преимущество использования plist состоит в том, что если вам нужно изменить его, вы редактируете plist, а не код.

1 голос
/ 29 марта 2012

Статический NSDictionary является правильным инструментом для этого. Вы обычно инициализируете их методом +initialize:

static NSDictionary *kDictionary;

+ (void)initialize {
  if (self == [MYClass class]) {
    kDictionary = [[NSDictionary alloc] initWith...];
  }
}

initialize вызывается один раз для каждого класса с безопасностью потока непосредственно перед вызовом первого запрошенного метода для этого класса (обычно этот первый метод - +alloc). Тест self состоит в том, что подклассы будут автоматически вызывать их [super initialize], и вы, как правило, не хотите запускать это более одного раза.

...