おそらくあなたがやりたいことは、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クラスからインスタンス化されたオブジェクトには、1つ以上のPersonオブジェクトを含む最初の配列があります。次に、Personオブジェクトには、所有権を保持する配列もあります(この場合、文字列ですが、必要に応じてPossesionオブジェクトにすることもできます)。この場合、例を支援するために、Personクラスにも別のプロパティがあります。これも文字列です。
例えば:
@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
これが完了したので、カスケード配列のデータ構造を設定できます。PeopleListタグに出くわしたときにXMLを解析しているときに、次のことを行います。
currentPeopleList = [[PeopleList alloc] init];
そして、Person tageに出くわしたときは、次のことを行います。
currentPerson = [[Person alloc] init];
[peopleList.persons addObject: person];
所持:
[currentPerson.possesion addObject: contentsOfCurrentElement];
または名前:
currentPerson.name = contentsOfCurrentElement;
しかし、より具体的な質問に答えるために、データを一時的なNSArrayに格納してから、それをNSMutableArrayにコピーすることはしません。そうすることによるパフォーマンスの向上はほとんどなく、コピーを実行するとCPUサイクルとメモリが消費されます。