2011-02-14 4 views
0

안녕하세요, 기본적으로 입력 문자열의 트림 된 버전을 반환하는 간단한 함수가 있습니다. 문제는 장비를 실행할 때 & 누출 여부를 확인하는 것입니다.이 함수는 특히 stringWithString에 100 % 누출이 있음을 보여줍니다.stringWithString 누수 메모리

아무도 내가 여기서 잘못하고있는 것을 안내해 줄 수 있습니까?

+ (NSString *) trim:(NSString *)string 
{ 
    if (string == nil) 
     return nil; 
    NSString *str = [NSString stringWithString:string]; 
    str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

    //[[NSString stringWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]] autorelease]; 
    return str; 
} 
+0

이 문자열은 자동 릴리스 – kgutteridge

+0

아니요로 표시되어 있으므로 반환되는 문자열은 그대로 유지하고 있습니까? –

답변

2

첫째,이 누수가 stringWithString: 함께 있음이 확실하다, 나에게 절대적으로 괜찮 은데?

그렇다면 어쨌든 필요하지 않습니다. 당신은 간단하게 할 수 있습니다 : 당신이 NSAutoReleasePool이없는 스폰 스레드에서이 코드를 실행하면 [NSString stringWithString:string]; 그것에 보낸 autorelease 메시지를 가지고 있기 때문에 내가 생각할 수

+ (NSString *) trim:(NSString *)string 
{ 
    if (string == nil) 
     return nil; 

    return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 
2

유일한 이유가있다.

+0

'-stringWithString :'은 반드시 autorelease를 보낼 필요는 없습니다. 매개 변수가 NSMutableString이 아닌 경우 동일한 문자열을 반환 할 수 있습니다. – JeremyP

+0

hmmm Jeremy 더 이상 나를 혼란스럽게 생각했습니다. –

3

이 코드가 스레드에서 실행 중이면 자동 복구 풀이 설정되어 있는지 확인하십시오. stringWithString은 자동 렌더링 된 객체를 반환하며 스레드에 대한 자동 복구 풀이있을 때만 발생할 수 있습니다.

+0

예이 경우입니다 ... –