Утечка памяти с автоматически выпущенными строками iphone - PullRequest
1 голос
/ 06 июля 2010

Я пытаюсь очистить свое приложение от утечек с помощью инструмента Leak.Это показывает, что у меня есть утечки в 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];

Инструмент утечек показывает утечку в функции textForElement TBXML, которая предоставляет автоматически высвобождаемую строку:

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

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

Есть мысли?

Спасибо

1 Ответ

0 голосов
/ 06 июля 2010

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

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

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

...