2012-06-11 3 views
0
을 시작하지

objc [23601] : 자리에없는 풀과 오토 릴리즈 __NSCFSet 클래스의 객체 0x12b090f0 - 단지 누출 - 디버깅하는 objc_autoreleaseNoPool()에 휴식이 자리에없는 풀과 오토 릴리즈 - 새로운 스레드가

왜 다음 코드 섹션이 위의 누수 오류를 인쇄합니까?

+ (BOOL)getSkipFlag 
{ 

    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    if (![defs objectForKey:_BOOK_ID]) 
    { 
     [defs setObject:@"yyyy" forKey:_BOOK_ID]; 

     [defs synchronize]; 
    } 

    if (![[defs objectForKey:_BOOK_ID] isEqualToString:@"xxxx"]) 
    { 
     return NO; 
    } 

    return skipFlag; 
} 

사용

if (![ClassXYZ getSkipFlag]) 
.... 

나는 새로운 오토 릴리즈 풀을 설정하지 말았어야 그래서 나는 새로운 스레드를 사용하지 않습니다.

참고 : NSString *temp = [[NSBundle mainBundle] pathForResource:_CONFIG_PLIST ofType:@"plist"];는 - 나는 아이폰 OS 5.1 어떤 통찰력에 대한

감사를 사용하고 동일한 오류 를 인쇄 할 것이다.

업데이트 : ClassXYZ.m ... static BOOL skipFlag = NO;

세터 : + (공극) setSkipFlag (BOOL) boolValue { skipFlag = boolValue; }

사용법 : [ClassXYZ setSkipFlag : YES]; 정적 무효 convert_uri_to_file_name에 사용

(구조체 mg_connection * CONN, CONST의 char *의 URI, 의 char * 버피, size_t로 BUF_LEN) 당신이 사용되는 경우에 대한 좋은 지적을했다

오마르. 예를 들어 ClassXYZ 자신의 인스턴스 메소드가 오류없이 작동하는 것으로 밝혀졌습니다.

+0

아주 좋은 케이스를 가야 로그인하십시오 @autorelease 내부의 함수 호출을 넣으면 주위의 경우 (! [ClassXYZ getSkipFlag]) 또는 발신자를 게시 이것을 인쇄하는 함수 –

+0

감사합니다. Omar, pl 업데이트를 참조하십시오. – Zsolt

+0

호기심에서 벗어나서, 함수 호출을 @autorelease 내부에두면 로그가 사라 집니까? –

답변

0

, 당신은 더 많은 코드를 제공하시기 바랍니다 것이다 : 멀리

1

일반적으로 메인 스레드 용 자동 해제 풀은 main 기능의 첫 번째 줄에서 생성됩니다. main 함수가 실행되기 전에 자동 풀이 없다는 것을 알 수 있습니다.

+load 기능은 main 기능 전에 실행되기 때문에 누수의 원인이되는 한 가지 이유입니다. 그렇다면 대신 +initialize을 사용해보세요. 단지 호기심

+0

감사합니다. 추가 + (void) initialize {skipFlag = NO;}하지만 도움이되지 않습니다. 정적 BOOL skipFlag를 사용했습니다. 의 경우에 해당됩니다.m 파일. – Zsolt

관련 문제