Вопрос 1
Лучше иметь один NSArray для всех букв, это уменьшает количество переменных, с которыми вам придется иметь дело. Имея что-то вроде этого:
NSArray *arrayA;
NSArray *arrayB;
NSArray *arrayC;
...
NSArray *arrayZ;
Это просто большой код для чего-то, что может быть легко доступно в единой структуре данных, не говоря уже о том, что его проще обновлять, если вы планируете добавлять числа, знаки препинания и т. Д.
Вопрос 2
Изменяемое означает, что оно может быть обновлено, поэтому важный вопрос, должен ли ваш массив / словарь обновляться во время выполнения? Если ответ «нет», не изменяемый массив может быть лучше. С другой стороны, вам придется автоматически заполнять массив множеством вещей, поэтому наличие изменяемой версии может позволить вам иметь более чистый код (вместо [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"A"], ...]
).
Так что я бы пошел с изменяемой версией, только для более чистого кода.
Вопрос 3
Это личный выбор, но я не большой поклонник наличия вложенных структур данных в статически типизированных языках (например, делать это на python - блаженство myDictArray["key"][1]
). Я бы использовал изменяемый словарь, в котором составлены ключи, для хранения соответствующих данных:
NSString *key = [NSString stringWithFormat:"%c%d", letter, number]; // For example "J3" is the 3rd J letter.
С другой стороны, вместо использования изображений, я бы использовал большие квадратные UILabels, чтобы сэкономить в памяти (и психическое здоровье, работая с таким количеством изображений, тьфу), и выбрать один из множества шрифтов, которые использует iOS Вот полный список ).
При этом для генерации всего потребовалось бы два вложенных форса, один для перебора каждой буквы, а затем один для каждых 5 повторений, а затем создать метку и выбросить ее в словарь (я бы написал код, но я не на маке).