2010-07-06 2 views
1

Я пытаюсь очистить приложение от утечек с помощью инструмента 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]; 
} 

Поскольку мы говорим иногда о сотнях или даже тысячах точек, эти утечки становятся чем-то огромным. Я не могу понять, почему автореализованная строка создает утечки?

Любые мысли?

Благодаря

ответ

0

Там будут не сохраняют/проблемы высвобождения в размещенном коде. Единственное выделение в textForElement: - это stringWithCString:encoding: NSString, которое я сомневаюсь в утечке.

Проблема находится в другом месте и на нее не может быть получена данная информация. Вы уверены, что правильно читаете результаты Инструментов? Что статический анализ говорит о коде?

Я не знаю о библиотеке TBXML, но строка, содержащая nil == aXMLElement->text, делает ее немного подозрительной. Это не ошибка, а вопрос стиля: aXMLElement->text кажется строкой C, тогда как для объектов objc используется nil.

+0

Спасибо, вы были правы, утечка была в другом месте - массив, который держал массивы точек, не был освобожден –