मैं लगभग वहाँ ऑब्जेक्टिव-सी में सरल संदर्भ गिनती / स्मृति प्रबंधन को समझने रहा हूँ, लेकिन मैं निम्नलिखित कोड के साथ एक कठिन समय हो रही है। मैं mutableDict को रिहा कर रहा हूँ (नीचे दिए गए कोड में टिप्पणी की) है और यह मेरी कोड में हानिकारक व्यवहार के कारण है। अगर मैं स्मृति रिसाव जाने, यह उम्मीद के रूप में काम करता है, लेकिन यह है कि स्पष्ट रूप से इस सवाल का जवाब यहाँ नहीं है। ;-) आप में से किसी अधिक अनुभवी लोगों को कैसे मैं इस विधि बेहतर मेरी स्मृति पदचिह्न को संभालने के लिए में से किसी को फिर से लिख सकते हैं के रूप में सही दिशा में मुझे बात करने के लिए तरह पर्याप्त होगा? मुख्य रूप से मैं कैसे प्रबंध कर रहा हूँ NSMutableDictionary * mutableDict, के रूप में है कि बड़ा अपराधी यहाँ है के साथ। मैं इस समस्या को समझने के लिए चाहते हैं, और न सिर्फ नकल / पेस्ट कोड - तो कुछ टिप्पणियाँ / प्रतिक्रिया आदर्श है। सबको शुक्रीया।
- (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;
}













