Objective-c记忆问题

时间:2011-03-01 17:21:56

标签: objective-c memory-management

我对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];
}

1 个答案:

答案 0 :(得分:2)

之前已经多次回答过;但释放对象的行为不会立即将内存返回给系统。该应用程序保留未使用的竞技场部分,等待它们重新分配。

如果系统正在实际请求它们,它会放弃这些资源,但只要没有其他进程想要内存,您的应用程序就会依赖它,“以防万一”。