Neredeyse orada ancak aşağıdaki kodla zor günler yaşıyorum, Objective-C basit referans sayma / bellek yönetimini anlama ediyorum. Ben mutableDict bırakmadan ediyorum (aşağıda kodda yorumladı) ve bu benim kodunda zararlı davranışları neden oluyor. Ben bellek sızıntısı izin varsa, beklendiği gibi çalışır, ama bu burada açıkça cevap değil. ;-) Aranızda daha deneyimli millet nezaketini daha iyi hafızam ayak izi ele bu yöntemin herhangi yeniden yazmak nasıl olarak doğru yönde işaret etmek olurdu? Esas olarak burada büyük suçlu gibi ben NSMutableDictionary * mutableDict idare ediyorum nasıl. Sorunu anlamak ister ve sadece / yapıştır kodu kopyalayıp ediyorum - bu yüzden bazı yorumlar / geribildirim idealdir. Hepinize teşekkürler.
- (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;
}













