Verstehe ich es fast geschafft einfache Referenzzählung / Speicherverwaltung in Objective-C, aber ich bin eine schwierige Zeit mit dem folgenden Code aufweisen. Ich Freigabe mutableDict (im folgenden Code kommentiert) und es verursacht schädliches Verhalten in meinem Code. Wenn ich den Speicherverlust lassen, es funktioniert wie erwartet, aber das ist eindeutig nicht die Antwort hier. ;-) Würden jemand von euch erfahren Leuten so freundlich, mich wie in der richtigen Richtung zu zeigen, wie ich jede dieser Methode neu schreiben kann, um besser meinen Speicherbedarf zu umgehen? Vor allem mit, wie ich NSMutableDictionary * mutableDict bin Verwaltung, wie die großen Schuldige hier. Ich mag das Problem verstehen, und nicht nur Kopieren / Einfügen-Code - so einige Kommentare / Feedback ideal ist. Vielen Dank an Alle.
- (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;
}













