2009-04-12 3 views

답변

11

일반적으로 autorelease 풀을 만들 필요가 없습니다. 시스템은이 문제에 관심이 있기 때문입니다. 그러나 때로는이 작업을 수행해야합니다. 그것은 큰 루프에서 일반적입니다. 코드는 다음과 같습니다

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int i;  
for (i = 0; i < 1000000; i++) {  
    id object = [someArray objectAtIndex:i]; 
    // do something with object 
    if (i % 1000 == 0) { 
    [pool release]; 
    pool = [[NSAutoreleasePool alloc] init]; 
    } 
} 
[pool release]; 

오토 릴리즈 풀은 스택으로 유지 : 새로운 오토 릴리즈 풀을 만들 경우,이 스택의 상단에 추가하고, 모든 오토 릴리즈 메시지가 최상위 풀에 수신기를두고 도착 .

+0

설명. 그러나 objectAtIndex를 호출하면 autorelease 풀에 아무 것도 추가하지 않으므로 autorelease 풀없이 루프에서 사용할 수 있습니다. –

+1

Apple은 GC 환경과의 향후 호환성을 위해 [pool release] 대신 [pool drain]을 사용하도록 권장합니다. –

+0

@Marc Charbonneau 그럼 수영장에서 석방하지 않은 누수가 없습니까? –

관련 문제