приложение для iphone использует все больше и больше памяти - PullRequest
0 голосов
/ 27 октября 2011

Обновление

Решена проблема, и был сохранен цикл.

Исходный вопрос

Профиль показал нулевой объем памятиутечка, однако с течением времени приложение использовало все больше и больше памяти.

Давайте рассмотрим одну из вещей в приложении и подробно рассмотрим.Существует табличное представление - назовем его основной таблицей. Если щелкнуть любую из ее ячеек, она приведет вас ко второму виду таблицы, а во втором будет от 10 до 20 изображений.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    FlyerListTable *detail = [[FlyerListTable alloc] initWithNibName:@"FlyerListTable" bundle:nil]; 
    detail.department = [categories objectAtIndex: indexPath.row];
    detail.promotions = [items valueForKey:detail.department];
    [self.navigationController pushViewController:detail animated:NO];
    [detail release];
}

FlyerListTable - это класс для второй таблицы, и он определен в dealloc, однако я отследил его, и этот метод dealloc никогда не вызывался.

1 Ответ

1 голос
/ 27 октября 2011

Что такое соглашение или лучшая практика?

Я бы посоветовал вам загрузить его лениво:

- (FlyerListTable*)flyerListTable
{
    if (_flyerListTable == nil)
        _flyerListTable = [[FlyerListTable alloc] initWithNibName:@"FlyerListTable" bundle:nil];
    return _flyerListTable;
}

Не забудьте выпустить его в dealloc.

Затем используйте его, когда выделена строка

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    FlyerListTable* detail = [self flyerListTable];
    detail.department = [categories objectAtIndex: indexPath.row];
    detail.promotions = [items valueForKey:detail.department];
    [self.navigationController pushViewController:detail animated:NO];
}

Когда я его отслеживал, этот метод dealloc никогда не вызывался.

Если deallocне вызывается в вашем примере это означает, что какой-то другой объект сохранил его.Постарайтесь выяснить, какой объект может его сохранить, прежде чем вносить какие-либо изменения.Вы можете переопределить метод retain для этой цели:

- (id)retain
{
    return [super retain];
}

Установите точку останова, чтобы увидеть стек вызовов.Вы не должны использовать ARC, конечно.

Удачи!

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