Objective-C에서 메모리 관리 작업을 이해하려고합니다. Activity Monitor에 나열된 메모리 사용량을 보면 메모리가 해제되지 않은 것처럼 보입니다 (열 rsize를 의미 함). 그러나 "Object Allocation"에서 모든 것이 잘 보입니다. 보유하고 멋진 해제, 모든 것이 균형에 관해서는Objective-C에서 메모리가 실제로 해제되는시기는 언제입니까?
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSInteger i, k=10000;
while (k>0) {
NSMutableArray *array = [[NSMutableArray alloc]init];
for (i=0;i<1000*k; i++) {
NSString *srtring = [[NSString alloc] initWithString:@"string...."];
[array addObject:srtring];
[srtring release];
srtring = nil;
}
[array release];
array = nil;
k-=500;
}
[NSThread sleepForTimeInterval:5];
[pool release];
return 0;
}
: 여기 내 간단한 코드입니다. 그러나이 작은 프로그램을 종료 한 후에 만 rsize가 감소합니다. 종료하기 전에 어떻게 든 메모리를 "정리"할 수 있습니까?
예제 코드에서 배열과 문자열은 풀이 비우거나 해제 될 때까지 해제되지 않습니다. 이것은 프로그램이 종료되기 바로 전에 발생합니다. 윌리엄 (Williham)은 정확하며 메모리는 아마도 시스템에 의해 즉시 회수되지 않을 것이라고 말했다. –
[풀 릴리스] 이후에도 메모리는 계속 남아 있습니다. – zhyk
@Matt : 너 무슨 일있어? 여기서는 배열이 바깥 쪽 루프의 끝에서 바로 해제되는 것처럼 보입니다. 자동 릴리즈가 필요 없습니다.'- [release]'는 즉각적입니다. –