그래서, [NSThread detachNewThreadSelector]를 사용하여 새 스레드를 생성하고 콘솔에 "autoreleased no pool in place"오류가 발생합니다. 자동 출시 풀을 만드는 데 실패하면이 문제가 발생할 수 있습니다.하지만 문제는 생성하는 것입니다. 동일한 앱의 다른 부분에서 유사한 코드를 사용하고 이러한 오류가 발생하지 않습니다.iOS가 풀없이 자동으로 풀립니다.하지만 ARP가 생성됩니다!
가 여기에 관련 코드입니다 :
- (void) startThread:(NSString*)strURL
{
// start new thread to load image
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[NSThread detachNewThreadSelector:@selector(loadImageFromURL:) toTarget:self withObject:strURL];
[pool release];
}
- (void) loadImageFromURL:(NSString*)strURL
{
NSNumber* nn = [NSNumber numberWithInt:self.tag];
NSLog(@"loadURL: Tag number == %i", [nn intValue]);
// other code here actually does the work
}
지금, 실제로 (원격 서버에서 이미지를로드하는) 작업을 수행 loadImageFromURL에 더 많은 코드가 있었다 -하지만 문제는 그 코드없이 자체 명단, 그래서 그것을 제거했습니다. (단지 당신이 아무것도하지 않는 무의미한 실을 가지고 있다고 생각하지 않습니다!). 문제를 나타내는 코드 한 줄만 남겨 두었습니다. 자동 반복 처리 된 NSNumber 객체가 만들어졌습니다. 이 코드를 실행하면
, 그것은 콘솔에이를보고
물론__NSAutoreleaseNoPool(): Object 0x535c0e0 of class NSCFNumber autoreleased with no pool in place - just leaking
, 실제 코드가 다른 많은 AR 객체를 생성하고 그들 모두도보고받을.
도움이되는 팁이나 조언에 감사드립니다!
감사합니다.
칼 - 나는 당신의 시간을 낭비 죄송합니다. 당신은 물론 맞습니다. 그것은 * 내가 detachNewThreadSelector를 사용하는 앱의 다른 부분에서 어떻게 수행하고 있는지 *입니다. 나무 숲을 볼 수 없었습니다. 나는 틀린 패턴으로 고정되어 있었고 다른 코드를 보지 않았다. 나는 그것이 동일하다는 것을 확신했다. 빠른 응답 주셔서 감사합니다! – Jordan