【发布时间】:2010-04-27 20:06:20
【问题描述】:
我正在尝试了解 Objective-C 中的内存管理内容。 如果我看到 Activity Monitor 列出的内存使用情况,看起来内存没有被释放(我的意思是 rsize 列)。但是在“对象分配”中,一切看起来都很好。 这是我的简单代码:
#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 是正确的,系统可能不会立即回收内存。
-
但是在 [pool release] 之后内存还在。
-
@Matt:你在做什么?从这里看起来好像数组是在外循环结束时释放的;不涉及自动释放,
-[release]是即时的。 -
哦,悲伤,你是对的。我没有想。谢谢指正。
标签: objective-c memory-management