6
Apple은 메모리 절약을 위해 좋은 생각이라고 말합니다. 코드에서 어떻게 보이겠습니까?메모리를 절약하기 위해 로컬 자동 풀을 만드는 방법은 무엇입니까?
Apple은 메모리 절약을 위해 좋은 생각이라고 말합니다. 코드에서 어떻게 보이겠습니까?메모리를 절약하기 위해 로컬 자동 풀을 만드는 방법은 무엇입니까?
일반적으로 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];
오토 릴리즈 풀은 스택으로 유지 : 새로운 오토 릴리즈 풀을 만들 경우,이 스택의 상단에 추가하고, 모든 오토 릴리즈 메시지가 최상위 풀에 수신기를두고 도착 .
설명. 그러나 objectAtIndex를 호출하면 autorelease 풀에 아무 것도 추가하지 않으므로 autorelease 풀없이 루프에서 사용할 수 있습니다. –
Apple은 GC 환경과의 향후 호환성을 위해 [pool release] 대신 [pool drain]을 사용하도록 권장합니다. –
@Marc Charbonneau 그럼 수영장에서 석방하지 않은 누수가 없습니까? –