2011-06-08 45 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]; 
} 
相關問題