Objective-C Вопрос о памяти - PullRequest
       2

Objective-C Вопрос о памяти

0 голосов
/ 01 марта 2011

У меня есть вопрос, касающийся управления памятью в target-c. Я читал различные документы Apple, касающиеся этого, но я все еще, кажется, не понимаю это. Я создал небольшой пример приложения, чтобы продемонстрировать свое замешательство. Когда я запускаю приложение Activity Monitor заявляет, что оно использует около 7 МБ. Когда я выполняю основной цикл, использование памяти увеличивается до 44 МБ, что ожидается. Однако, когда я освобождаю массив, в Activity Monitor я получаю только около 14 МБ. Приложение продолжает использовать около 30 МБ. Разве я не должен вернуть всю свою память, чтобы вернуть «Реальную память» на 7 МБ в Activity Monitor?

Что я делаю не так?

Заранее спасибо.

Вот приложение Легендат:

- (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 Ответ

2 голосов
/ 01 марта 2011

На это уже много раз отвечали;но акт освобождения объекта не сразу возвращает память в систему.Приложение удерживает части арены, которые не используются, в ожидании их перераспределения.

Если они фактически запрашиваются системой, оно отдает эти ресурсы, но до тех пор, покапоскольку никакой другой процесс не хочет памяти, ваше приложение будет зависать от нее, «на всякий случай».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...