Ho quasi non capire una gestione semplice conteggio dei riferimenti / memoria in Objective-C, ma sto avendo un momento difficile con il seguente codice. Sto rilasciando mutableDict (commentato nel seguente codice) e sta causando un comportamento dannoso nel mio codice. Se lascio la perdita di memoria, funziona come previsto, ma non è chiaramente la risposta qui. ;-) Qualcuno di voi gente più esperti essere così gentile da puntare nella giusta direzione per quanto come posso riscrivere qualsiasi di questo metodo per gestire meglio la mia occupazione di memoria di me? Soprattutto per come sto riuscendo NSMutableDictionary * mutableDict, come quello è il grande colpevole qui. Mi piacerebbe capire il problema, e non basta copiare / incollare il codice - così alcuni commenti / feedback è l'ideale. Ringrazia tutti.
- (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;
}













