NSXMLParser泄漏
问题描述:
在这里,我想解析来自我的应用程序的服务器端的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];
}
任何人都可以帮助我找到下面的代码中的内存泄漏。
答
变化:
self.curr_patient_array = [NSMutableArray new];
要:
NSMutableArray *newPatientArray = [NSMutableArray new];
self.curr_patient_array = newPatientArray;
[newPatientArray release];
而且curr_patient = [TPatient new];
最终可能会成为一个问题。每次你打电话给这条线时,你都需要确保将它放到某个地方。你可能想把它切换到像上面的NSMutableArray这样的综合变量,并以相同的方式分配它。
注意[NSObject new]
相同[[NSObject alloc] init]
。
代码太多。你需要做更多的工作来告诉我们什么在泄漏。然后清理代码,直到找到泄漏的位置。 – 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