我对objective-c中的内存管理有疑问。我已经阅读了Apple有关此问题的各种文件,但我似乎仍然没有理解它。我创建了一个小样本应用程序来证明我的困惑。当我启动应用程序时,Activity Monitor声明它使用大约7MB。当我执行主循环时,内存使用量高达44MB,这是预期的。但是,当我发布数组时,我只在活动监视器中返回大约14MB。该应用程序继续使用大约30MB。我不应该把所有记忆都归还给活动监视器中的“真实记忆”到7MB吗?
我做错了什么?
提前致谢。
这是AppDelegate:
- (IBAction) buildArray:(id)sender {
values = [[NSMutableArray alloc] init]; // values is an instance variable of the appDelegate
for(int i = 0; i < 500000; ++i) {
NSString *tempString = [NSString stringWithFormat:@"New Object %i", i];
[values addObject:tempString];
}
[valuesTable reloadData]; // valuesTable is a NSTableView to diplay the array.
}
- (IBAction) clearMemory:(id)sender {
[values release];
[valuesTable reloadData];
}
- (int) numberOfRowsInTableView: (NSTableView *) tableView {
if (values) {
return [values count];
} else {
return 0;
}
}
- (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (int) row {
return [values objectAtIndex:row];
}
答案 0 :(得分:2)
之前已经多次回答过;但释放对象的行为不会立即将内存返回给系统。该应用程序保留未使用的竞技场部分,等待它们重新分配。
如果系统正在实际请求它们,它会放弃这些资源,但只要没有其他进程想要内存,您的应用程序就会依赖它,“以防万一”。