2011-06-08 75 views
0

我得到以下内存泄漏错误,与下面的解析器方法相对应。这是每一个我用我的自定义类的setter(4次)的时候,我得到一个内存错误泄漏:为什么使用我的自定义类会导致内存错误?

Leaked Object # Address Size Responsible Library Responsible Frame 
NSCFString 630 <multiple> 20160 Foundation -[NSCFString copyWithZone:] 
NSCFString 625 <multiple> 10000 Foundation -[NSCFString copyWithZone:] 
NSCFString 623 <multiple> 19936 Foundation -[NSCFString copyWithZone:] 
NSCFString 613 <multiple> 23664 Foundation -[NSCFString copyWithZone:] 

我自定义的类接口:

#import <Foundation/Foundation.h> 

@interface FaxRecipient : NSObject { 
    NSString * contactID; 
    NSString * name; 
    NSString * fax; 
    NSString * company; 
    NSString * phone; 
} 
@property(nonatomic,copy)NSString *contactID; 
@property(nonatomic,copy)NSString *name; 
@property(nonatomic,copy)NSString *fax; 
@property(nonatomic,copy)NSString *company; 
@property(nonatomic,copy)NSString *phone; 

@end 

实现:

#import "FaxRecipient.h" 

@implementation FaxRecipient 
@synthesize contactID, name, fax, company, phone; 
@end 

我在以下上下文中使用它:

-(void)parser:(NSXMLParser *)parser 
    didStartElement:(NSString *) elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName 
     attributes:(NSDictionary *)attributeDict 
{ 

    if ([elementName isEqual:@"ContactId"]) { 
     faxRecipient =[[FaxRecipient alloc]init]; 
     remoteRecipientString = [[NSMutableString alloc]init]; 
    } 

    else if ([elementName isEqual:@"Name"]) { 
     remoteRecipientString = [[NSMutableString alloc]init]; 


    }else if ([elementName isEqual:@"Fax"]) { 
     remoteRecipientString = [[NSMutableString alloc]init]; 
    } 

    else if ([elementName isEqual:@"Rec"]) { 
     remoteRecipientString = [[NSMutableString alloc]init]; 
    } 

} 

-(void) parser:(NSXMLParser *)parser 
foundCharacters:(NSString *)string{ 

    [remoteRecipientString appendString:string]; 

} 


-(void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *) elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName{ 


    if ([elementName isEqual:@"ContactId"]) { 
     faxRecipient.contactID = remoteRecipientString; 
     [remoteRecipientString release]; 
     remoteRecipientString = nil; 
    } 


    if ([elementName isEqual:@"Name"]) { 
     faxRecipient.name = remoteRecipientString; 
     [remoteRecipientString release]; 
     remoteRecipientString = nil; 
    } 


    if ([elementName isEqual:@"Fax"]) { 
     faxRecipient.fax = remoteRecipientString; 
     [remoteRecipientString release]; 
     remoteRecipientString = nil; 

    } 

    if ([elementName isEqual:@"Rec"]) { 
     faxRecipient.phone = remoteRecipientString; 
     [remoteRecipientItems addObject:faxRecipient];//delivery complete as this is end of xml 
     [faxRecipient release]; 
     faxRecipient = nil; 
     [remoteRecipientString release]; 
     remoteRecipientString = nil; 

    } 


} 
+0

的可能重复[哪里是我的UITableViewController内存泄漏?](http://stackoverflow.com/questions/6273931/where-is-the-memory-leak-in-my-uitableviewcontroller) – 2011-06-08 06:31:54

回答

1

您必须实施dealloc方法,您将在其中释放复制的字符串。

- (void) dealloc 
{ 
    [super dealloc]; 
    [contactID release]; 
    [name release]; 
    [fax release]; 
    [company release]; 
    [phone release]; 
} 
相关问题