我正在尝试使用泄漏仪器清理我的应用程序泄漏。 它向我展示了xml解析器(TBXML)上的泄漏。
这是我要在解析时创建的一个类:
@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];
}
由于我们有时谈论数百甚至数千个点,这些泄漏变得非常重要。我无法理解为什么自动释放的字符串会产生泄漏?
有什么想法吗?
由于
答案 0 :(得分:0)
发布的代码中没有保留/释放问题。 textForElement:
中唯一的分配是NSString的stringWithCString:encoding:
,我怀疑它会泄漏。
问题出在其他地方,无法用给定的信息回答。您确定您正在正确阅读仪器结果吗?静态分析对代码的评价是什么?
我不知道TBXML库,但包含nil == aXMLElement->text
的行使它看起来有点可疑。这不是错误,而是风格问题:aXMLElement->text
似乎是一个C字符串,而nil
用于objc对象。