Ik ben er bijna begrijpen eenvoudige verwijzing tellen / geheugenbeheer in Objective-C, maar ik heb een moeilijke tijd met de volgende code. Ik ben het vrijgeven van mutableDict (commentaar in de onderstaande code) en het veroorzaakt schadelijk gedrag in mijn code. Als ik laat de geheugenlek, het werkt zoals verwacht, maar dat is duidelijk niet het antwoord hier. ;-) Zou iemand van jullie meer ervaren mensen zijn vriendelijk genoeg om me in de juiste richting als hoe ik kan herschrijven elk van deze methode om beter om met mijn memory footprint? Vooral met de manier waarop ik het beheren van NSMutableDictionary * mutableDict, want dat is de grote boosdoener hier. Ik wil graag het probleem te begrijpen, en niet alleen copy / paste-code - dus enkele opmerkingen / feedback is ideaal. Bedankt allemaal.
- (NSArray *)createArrayWithDictionaries:(NSString *)xmlDocument
withXPath:(NSString *)XPathStr {
NSError *theError = nil;
NSMutableArray *mutableArray = [[[NSMutableArray alloc] init] autorelease];
//NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc] init];
CXMLDocument *theXMLDocument = [[[CXMLDocument alloc] initWithXMLString:xmlDocument options:0 error:&theError] retain];
NSArray *nodes = [theXMLDocument nodesForXPath:XPathStr error:&theError];
int i, j, cnt = [nodes count];
for(i=0; i < cnt; i++) {
CXMLElement *xmlElement = [nodes objectAtIndex:i];
if(nil != xmlElement) {
NSArray *attributes = [NSArray array];
attributes = [xmlElement attributes];
int attrCnt = [attributes count];
NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc] init];
for(j = 0; j < attrCnt; j++) {
if([[[attributes objectAtIndex:j] name] isKindOfClass:[NSString class]])
[mutableDict setValue:[[attributes objectAtIndex:j] stringValue] forKey:[[attributes objectAtIndex:j] name]];
else
continue;
}
if(nil != mutableDict) {
[mutableArray addObject:mutableDict];
}
[mutableDict release]; // This is causing bad things to happen.
}
}
return (NSArray *)mutableArray;
}













