xmlファイルを解析しようとしています。私は辞書の配列を作成していますし、これらの作成された配列で配列を作成しています。 nsdictionaryを配列にコピーしているときにメモリリークが発生しています。誰でも助けてください! おかげtInState、tInStateはnsmutabあるここデータの解析時にメモリリークが発生する
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if(parseMode == 1){
// NSLog(@"found this start tag: %@", elementName);
if ([elementName isEqualToString:@"Group"]) {
[tInState removeAllObjects];
}
else if ([elementName isEqualToString:@"State_Name"]) {
tData = [[NSMutableDictionary alloc] init];
xmlItem = 0;
}
else if ([elementName isEqualToString:@"T_Name"]) {
xmlItem = 1;
}
else if ([elementName isEqualToString:@"T_Address"]) {
xmlItem = 2;
}
else if ([elementName isEqualToString:@"T_Ph"]) {
xmlItem = 3;
}
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (parseMode == 1) {
// NSLog(@"found this end tag: %@", elementName);
if([elementName isEqualToString:@"T_Info"]) {
[tInState addObject:[tData copy]];
[tData autorelease];
}
else if ([elementName isEqualToString:@"Group"]) {
[tlist addObject:tInState];
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if (parseMode == 0) {
[self addToStateList:string];
}
else if (parseMode == 1) {
// NSLog(@"found this character: %@", string);
switch (xmlItem) {
case 0:
[tData setValue:string forKey:@"State_Name"];
break;
case 1:
[tData setValue:string forKey:@"T_Name"];
break;
case 2:
[tData setValue:string forKey:@"T_Address"];
break;
case 3:
[tData setValue:string forKey:@"T_Ph"];
break;
default:
break;
}
}
}
私はviewdidload関数で割り当て、releaseMemoryで解放した私はNScopyの文書を調べて、コピーを使用すると所有権が移転されると言います。私はすべての配列を解放しているので、なぜそれでも問題を引き起こしているのですか?
助けてください。 ありがとう
私はdidndelementの行をクリアしませんでした。私はnsdictionary(tdata)を公開していません。私はちょうどクラッシュをリリースする場合。 – pa12
コードを貼り付けて、スクリーンショット(読みにくい)を取り除いてください。 –
ARCに変換することを検討してください。これらの種類の問題は消えます。 – Cthutu