2012-05-12 3 views
0

누수 :이상한 NSLog 오류. 난 내 응용 프로그램 출력을 실행할 때 메모리 나에게이 문자열을 많이 보여줍니다

2012-05-12 14:41:52.542 PermTour[1688:15c0b] *** __NSAutoreleaseNoPool(): Object 0x5c39520 of class NSCFString autoreleased with no pool in place - just leaking 

을 그리고 난 알고 코드의이 부분에서 문제. 왜냐하면, 제가 의견을 말할 때, 출력은 비어 있습니다.

for(int i=0;i<[dataBase.allDataBase count];i++){ 
     aPLace = [dataBase.allDataBase objectAtIndex:i]; 
     name = [aPLace.name lowercaseString]; 
     description = [aPLace.description lowercaseString]; 
     if (!([name rangeOfString:searchText].location == NSNotFound) || !([description rangeOfString:searchText].location == NSNotFound)){ 
      [foundedPlaces addObject:aPLace]; 
     } 

    } 

아이디어가 있으십니까? Thnx

UPD. 내가 모든 코드를 언급하고처럼 보이는 경우

:

for(int i=0;i<[dataBase.allDataBase count];i++){ 
     aPLace = [dataBase.allDataBase objectAtIndex:i]; 
     name = [aPLace.name lowercaseString]; 
     //description = [aPLace.description lowercaseString]; 
     /* 
     if (!([name rangeOfString:searchText].location == NSNotFound) || !([description rangeOfString:searchText].location == NSNotFound)){ 
      [foundedPlaces addObject:aPLace]; 
     } 
     */ 

    } 

여전히 메모리 누수 .. 그래서 지금 쓸 생각? NSAutoreleasePool를 사용하는

UPD는 2 enter image description here

+0

이 메서드는 백그라운드 스레드에서 호출됩니다? – rishi

+0

@rishi 예.백그라운드에서 –

답변

2

는 데이터 (메모리)를 많이 다루고, 그것은 항상 바람직하다.

편집 -이 당신을 도울 것입니다

-(returnType)yourMethod:(returnType)parameter @autoreleasepool 
{ 
    @autoreleasepool 
    { 
     //method body. 
    } 
} 

희망.

+0

당신은 내가 어떻게 사용해야하는지 설명 할 수 있겠습니까? –

+1

@EugeneTrapeznikov - 편집 된 답변을 확인하십시오. – rishi

+0

XCode는 ARC에서 사용할 수 없다고 말했습니다. –

1

이 오류 메시지는 클래스 초기화 메서드입니다 (예 : +initialize, +load 또는 기타 사용자 지정 메서드).

나를 위해이 솔루션은 다음과 같이 오토 릴리즈 풀을 생성하는 간단했다 :

@autoreleasepool 
{ 
    initThis(); 
    [That init]; 
} 

@autoreleasepool 키워드는 ARC와 유사한 의미를 가진 비 ARC 프로젝트 모두에서 사용할 수있다. 초기화 (또는 sharedApplication 내 루프 구체적

NSApplication 클래스 초기화 동안 이벤트 내부에서 오토 릴리즈 풀합니다 ( NSAutoreleasePool 클래스의 인스턴스)를 설정한다 : 여기서

그 문제에 small print이고) 을 실행하고 메소드를 실행하십시오. 마찬가지로 Application Kit이 에 추가하는 메소드 NSBundle은 nib 파일을로드하는 동안 자동 릴리즈 풀을 사용합니다. 이들 자동 풀 풀은 해당 NSApplication 및 NSBundle 메소드의 범위 밖에서 액세스 할 수 없습니다. 일반적으로 응용 프로그램은 이벤트 루프가 실행되는 동안 또는 nib 파일에서 객체를로드하여 을 생성하므로 일반적으로이 액세스가 부족한 은 문제가되지 않습니다. 그러나 main() 함수 내에서 코코아 클래스 (nib 파일로드 또는 NSApplication 초기화 이외)를 사용해야하는 경우 클래스를 사용하기 전에 autorelease 풀 을 만들어 풀을 풀어야합니다. 너 끝났어. 자세한 내용은 Foundation Framework Reference의 NSAutoreleasePool을 참조하십시오.

+0

이 코드를 어디에 전달해야합니까? –

+0

@EugeneTrapeznikov 죄송합니다, 이해가 안됩니다. – trojanfoe