Είμαι σχεδόν εκεί κατανόηση απλή διαχείριση καταμέτρηση αναφορά / μνήμης σε Objective-C, όμως είμαι έχοντας μια δύσκολη στιγμή με τον κωδικό. Είμαι απελευθερώνοντας mutableDict (σχολίασε στην παρακάτω κώδικα) και αυτό είναι που προκαλεί επιζήμια συμπεριφορά κωδικό μου. Αν Άφησα τη διαρροή μνήμης, λειτουργεί όπως αναμένεται, αλλά αυτό δεν είναι προφανώς η απάντηση εδώ. ;-) Θα κάποιος από εσάς τους πιο έμπειρους λαοί την καλοσύνη να μου προς τη σωστή κατεύθυνση και πώς μπορώ να ξαναγράψουν κάποια από αυτή τη μέθοδο για να χειριστεί καλύτερα το αποτύπωμα της μνήμης μου; Κυρίως με το πώς είμαι διαχείρισης NSMutableDictionary * mutableDict, καθώς αυτό είναι το μεγάλο ένοχος εδώ. Θα ήθελα να κατανοήσουν το πρόβλημα, και όχι μόνο copy / paste κώδικα - έτσι κάποια σχόλια / ανατροφοδότηση είναι ιδανική. Σας ευχαριστώ όλους.
- (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;
}













