在这里,我试图解析来自应用程序服务器端的xml数据。但是这段代码显示了仪器的泄漏。
TPatient是带有以下变量的NSObject : FirstName,LastName,BirthDate,Phone,Email,Password,Chart,Referredby,RecordConsult,Doctor,Assistant,Notes,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)
{
curString=@"";
}
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];
} 有人能帮我找出下面代码中的内存泄漏吗?
发布于 2011-05-19 14:15:19
更改:
self.curr_patient_array = [NSMutableArray new];至:
NSMutableArray *newPatientArray = [NSMutableArray new];
self.curr_patient_array = newPatientArray;
[newPatientArray release];此外,curr_patient = [TPatient new];可能最终会成为一个问题。每次你调用这条线路时,你都需要确保在某个地方释放它。您可能希望将其切换为一个合成变量,如上面的NSMutableArray,并以相同的方式分配它。
请阅读以下内容:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447
请注意,[NSObject new]与[[NSObject alloc] init]相同。
https://stackoverflow.com/questions/6053658
复制相似问题