2010-07-06 3 views
1

누출 장비로 누출로부터 내 앱을 정리하려고합니다. 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]; 
} 

우리는 때로는 수백 또는 수천 개의 포인트에 대해 이야기하기 때문에 이러한 누출은 엄청난 것이됩니다. 자동 검색 문자열이 누수를 생성하는 이유를 이해할 수 없습니까?

의견이 있으십니까?

감사

답변

0

이 유지 없음있다/게시 된 코드에서 해제 문제. textForElement:의 유일한 할당은 NSString의 stringWithCString:encoding:입니다.이 누설은 의심 스럽습니다.

문제는 다른 곳에서 발생하며 주어진 정보로는 대답 할 수 없습니다. Instruments 결과를 올바르게 읽으셨습니까? 정적 분석은 코드에 대해 무엇을 말합니까?

나는 TBXML 라이브러리에 대해 모른다. 그러나 nil == aXMLElement->text을 포함하는 줄은 약간 물고기 같아 보인다. 오류가 아니라 스타일에 대한 질문입니다. aXMLElement->text은 C 문자열로 보이고 nil은 objc 객체에 사용됩니다.

+0

감사합니다. 당신 말이 맞았습니다. 누설은 다른 위치에있었습니다. 배열은 포인트 배열을 할당 해제하지 않았습니다. –