更新:コードを編集しましたが、問題は解決しません...
皆さん、こんにちは。
これは私の最初の投稿です。この場所は、多くの質問を解決するための優れたリソースであることがわかりました。普段は自分で何とかしようと頑張っているのですが、今回は何が悪いのかさっぱり分からないので、誰か助けていただければと思います。
TouchXML を使用していくつかの xml ファイルを解析する iPhone アプリを構築しています。結果のダウンロードと解析を処理する XMLParser クラスがあります。XMLParser の同じインスタンスを使用して xml ファイルを複数回解析すると、メモリ リークが発生します。解析スニペットの 1 つを次に示します (関連する部分のみ)。
for(int counter = 0; counter < [item childCount]; counter++) {
CXMLNode *child = [item childAtIndex:counter];
if([[child name] isEqualToString:@"PRODUCT"])
{
NSMutableDictionary *product = [[NSMutableDictionary alloc] init];
for(int j = 0; j < [child childCount]; j++) {
CXMLNode *grandchild = [child childAtIndex:j];
if([[grandchild stringValue] length] > 1) {
NSString *trimmedString = [[grandchild stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[product setObject:trimmedString forKey:[grandchild name]];
}
}
// Add product to current category array
switch (categoryId) {
case 0:
[self.mobil addObject: product];
break;
case 1:
[self.allgemein addObject: product];
break;
case 2:
[self.besitzeIch addObject: product];
break;
case 3:
[self.willIch addObject: product];
break;
default:
break;
}
[product release];
}
}
初めて xml を解析すると、インストルメントにリークが表示されません。次に解析すると、多くのリーク (NSCFString / NSCFDictionary) が発生します。
Instrumentsは、リークされたオブジェクトを掘り下げると、 CXMLNode.m 内のこの部分を示します。
theStringValue = [NSString stringWithUTF8String:(const char *)theXMLString];
if ( _node->type != CXMLTextKind )
xmlFree(theXMLString);
}
return(theStringValue);
私は本当に長い時間を費やし、これを修正するために複数のアプローチを試みましたが、これまでのところ役に立ちませんでした。
どんな助けでも大歓迎です、ありがとう!