内存泄漏与自动释放字符串iphone

问题描述:

我想清理我的应用程序泄漏与泄漏仪器。 它显示了我在xml解析器(TBXML)上的泄漏。内存泄漏与自动释放字符串iphone

这是一类我会在解析创建:

@interface GraphPoint : NSObject { 
    NSString* x; 
    NSString* y; 
} 


@property (nonatomic, copy) NSString* x; 
@property (nonatomic, copy) NSString* y; 

@end 

@implementation GraphPoint 

@synthesize x, y; 

... some calculations 

- (void) dealloc 
{ 
    [x release]; 
    [y release]; 
    [super dealloc]; 
} 

@end 

在解析器:

... //当发现根据元素:

 NSString *str; 
     GraphPoint *aPoint = [[GraphPoint alloc] init]; 

     TBXMLElement *item = [TBXML childElementNamed:kX_Item parentElement:pntItem]; 
     str = [TBXML textForElement:item]; 
     aPoint.x = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];  

     item = [TBXML childElementNamed:kY_Item parentElement:pntItem]; 
     str = [TBXML textForElement:item]; 
     aPoint.y = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 


     [points addObject:aPoint]; 
     [aPoint release]; 

泄漏仪器在TBXML的textForElement函数中显示泄漏,该函数提供了自动释放字符串:

+ (NSString*) textForElement:(TBXMLElement*)aXMLElement { 
    if (nil == aXMLElement->text) return @""; 
    return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding]; 
} 

由于我们有时会谈论数百甚至数千个点,所以这些泄漏会变得非常巨大。我不明白为什么自动释放字符串会产生泄漏?

有什么想法?

谢谢

在发布的代码中没有保留/发布问题。 textForElement:中的唯一分配是NSString的stringWithCString:encoding:,我怀疑是否泄漏。

问题在别处,无法用给定的信息回答。你确定你正在正确地读取仪器结果吗?静态分析对代码有什么看法?

我不知道TBXML库,但包含nil == aXMLElement->text的行使它看起来有点可疑。这不是一个错误,而是一个风格问题:aXMLElement->text似乎是一个C字符串,而nil用于objc对象。

+0

谢谢,你是对的,泄漏是在其他地方 - 阵列,这是举行点阵列不释放 – 2010-07-06 12:03:22