在這裏,我想解析來自我的應用程序的服務器端的XML數據。但是這個代碼顯示儀器泄漏。NSXMLParser泄漏
TPatient是具有以下變量的NSObject: 名字,姓氏,出生日期,電話,電子郵件,密碼,圖表,Referredby,RecordConsult,醫生,助理,便箋,PatientStatus,PatientUUID。
-(NSMutableArray *)FromXML:(NSString *)xmlstring
{
curr_patient = nil;
self.curr_patient_array = nil;
last_string = nil;
NSData *data = [xmlstring dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
[xmlParser setDelegate:self];
[xmlParser parse];
[xmlParser setDelegate:nil];
[xmlParser release];
if(curr_patient!=nil) {
[curr_patient release];
curr_patient=nil;
}
if(last_string!=nil)
{
[last_string release];
last_string=nil;
}
while (PARSE_STATE == 0)
;
if (PARSE_STATE == 1) {
if (self.curr_patient_array!= nil) {
[self.curr_patient_array release ];
self.curr_patient_array = nil;
return nil;
}
}
if (self.curr_patient_array == nil)
return nil;
return [self.curr_patient_array autorelease];
}
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString *)
elementName namespaceURI:(NSString *)namespaceURI qualifiedName:
(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"Patients" ] == YES)
{
if(self.curr_patient_array !=nil)
{
[self.curr_patient_array release];
self.curr_patient_array=nil;
}
self.curr_patient_array = [NSMutableArray new ];
}
else if ([elementName isEqualToString:@"Patient" ] == YES)
{
if (curr_patient != nil)
[curr_patient release ];
curr_patient = [TPatient new ];
}
}
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString*)
namespaceURI qualifiedName:(NSString *)qName
{
NSString *curString;
if(last_string==nil)
{
[email protected]"";
}
else
{
curString=last_string;
[curString retain];
}
if ([elementName isEqualToString:@"Patientid" ] == YES)
{
NSInteger it = [ curString intValue];
curr_patient.PatientId = it;
[last_string release ];
last_string=nil;
}
else if ([elementName isEqualToString:@"Patient" ] == YES)
{
[self.curr_patient_array addObject:curr_patient ];
[curr_patient release];
curr_patient = nil;
}
[curString release];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
last_string = [NSString stringWithFormat:@"%@"
,string];
[last_string retain];
}
任何人都可以幫助我找到下面的代碼中的內存泄漏。
代碼太多。你需要做更多的工作來告訴我們什麼在泄漏。然後清理代碼,直到找到泄漏的位置。 – drekka 2011-05-19 04:14:26
儀器正在顯示didstartElement部分中的對象聲明curr_patient = [TPatient new]上的泄漏。並且還顯示了foundCharacters部分中的last_string部分 – 2011-05-19 04:20:01
的泄漏,請檢查並獲取一些想法:http://gigaom.com/apple/tutorial-build-a-simple-rss-reader-for-iphone/ – 2011-05-19 05:24:39