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オブジェクトにはpossesionsを保持する配列もあります(この場合は文字列ですが、必要に応じてPossesionオブジェクトにすることもできます)。この場合、Personクラスには別のプロパティもあります: 'name'これも文字列です。例えば
:あなたは、彼らがオブジェクトを受信できるようになりますので、配列のinit/ALLOCする必要がありますこれらのオブジェクトのinitメソッドの中
@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
。私はそれらをalloc'dするので、私のクラスは、リリースを担当しています。
@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を解析するようにしてください:
currentPerson = [[Person alloc] init];
[peopleList.persons addObject: person];
ポゼッション:
currentPeopleList = [[PeopleList alloc] init];
、あなたは人の田下に遭遇行う
[currentPerson.possesion addObject: contentsOfCurrentElement];
または名前:
currentPerson.name = contentsOfCurrentElement;
しかしあなたのより具体的な質問に答えるために、私は一時的なNSArrayにデータを格納せず、それをNSMutableArrayにコピーします。そうすることでパフォーマンスはほとんど向上せず、CPUのサイクルとメモリを消費してコピーを作成します。