Я пытаюсь очистить приложение от утечек с помощью инструмента Leak. Он показывает мне утечки в 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];
Утечка прибора показывает утечку в текстовой функции TBEML, которая обеспечивает автореализованную строку:
+ (NSString*) textForElement:(TBXMLElement*)aXMLElement {
if (nil == aXMLElement->text) return @"";
return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding];
}
Поскольку мы говорим иногда о сотнях или даже тысячах точек, эти утечки становятся чем-то огромным. Я не могу понять, почему автореализованная строка создает утечки?
Любые мысли?
Благодаря
Спасибо, вы были правы, утечка была в другом месте - массив, который держал массивы точек, не был освобожден –