I'm not sure whether it's your example or your terminology, but that's not really a multi-dimensional array, that's an array of records. I'd make each of your records a class:
@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];
This is more Objective C-ish than using a struct
.
If you really do mean a multi-dimensional array then there's nothing wrong with the "obvious" approach. Of course you might want to wrap it up in a class so you can also write some utility methods to make it easier to deal with.