Я не уверен, что это ваш пример или терминология, но это не многомерный массив, это массив записей. Я бы, чтобы каждый из ваших записей класс:
@interface Employee
NSString* name;
NSString* dept;
NSString* year;
@end
@property (nonatomic,retain) NSString* name;
@property (nonatomic,retain) NSString* dept;
@property (nonatomic,retain) NSString* year;
// ... rest of class def
Employee* a = [[Employee alloc] init];
a.name = @"Bob";
a.dept = @"Sales";
a.year = @"2008";
// declare others
NSArray* array = [NSArray arrayWithObjects:a,b,c,nil];
[a release];
Это более Objective C-иш, чем при использовании struct
.
Если вы действительно имеете в виду многомерный массив, тогда нет ничего плохого в «очевидном» подходе. Конечно, возможно, вы захотите обернуть его в классе, чтобы вы могли также написать некоторые полезные методы, чтобы упростить работу.
Одно замечание: вы не хотите, вложенных друг в друга NSArrays из-за способа использования класса для проверки наличия объекта в коллекции: При использовании containsObject: NSArray посылает -hash сообщение для каждого объекта в коллекции и сравнивает результат с объектом, присутствие которого вы проверяете. Когда объектом является другой сбор, реализация по умолчанию отправляет хэш в коллекцию, которая, в свою очередь, отправляет ее каждому объекту внутри него. Поэтому, если вам нужна быстрая и эффективная матрица, вам нужно бросить свой собственный. –