Я думаю, что вы, вероятно, хотите сделать, это создать несколько классов, которые соответствуют тому, что вы представляете в своем XML. Например, если ваш XML выглядит примерно так:
<peopleList>
<person>
<name>Joe</name>
<possession>Shovel</possession>
</person>
<person>
<name>Sam</name>
<possession>Shovel</possession>
<possession>Fork</possession>
<possession>Backpack</possession>
</person>
</peopleList>
У вас должен быть класс PeopleList и класс Person. Объект, созданный из класса PeopleList, имеет ваш первый массив, который содержит один или несколько объектов Person. Объекты Person, в свою очередь, также имеют массивы для хранения положений (которые в данном случае являются строками - хотя при необходимости они могут быть объектами Possesion). В этом случае, чтобы помочь примеру, у класса Person также есть другое свойство: 'name' который также является строкой.
Например:
@interface PeopleList {
NSMutableArray *persons; // An array to store the Person objects
}
@property (nonatomic, retain) NSMutableArray *persons;
@end
@interface Person {
NSString *name;
NSMutableArray *possesions; //An array to store this Person's possesion strings
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSMutableArray *possesions;
@end
В методе init этих объектов вам нужно будет распределить / инициализировать массивы, чтобы они были готовы к приему объектов. И поскольку я их выделил, мой класс отвечает за выпуск.
@implementation PeopleList
-(id) init {
if (self = [super init]) {
persons = [[NSMutableArray alloc] init];
}
}
-(void) dealloc {
[persons release];
[super dealloc];
}
@end
@implementation PeopleList
-(id) init {
if (self = [super init]) {
possesions = [[NSMutableArray alloc] init];
}
}
-(void) dealloc {
[possesions release];
[super dealloc];
}
@end
Теперь, когда это сделано, вы можете настроить структуру данных каскадных массивов.
Когда вы анализируете XML, когда сталкиваетесь с тегом PeopleList, выполните:
currentPeopleList = [[PeopleList alloc] init];
и когда вы встречаете персонажа, сделайте:
currentPerson = [[Person alloc] init];
[peopleList.persons addObject: person];
Владение:
[currentPerson.possesion addObject: contentsOfCurrentElement];
или имя:
currentPerson.name = contentsOfCurrentElement;
Но чтобы ответить на ваш более конкретный вопрос, я не храню данные во временном NSArray, а затем копирую их в NSMutableArray. При этом почти нет выигрыша в производительности, и вы будете записывать циклы ЦП и память при копировании.