Отказ от ненормального поведения при нажатии Viewcontroller

 -(void)NewButton
    {
        ApplianceViewController *VC = [[ApplianceViewController alloc] initWithNibName:@"ApplianceViewController" bundle:[NSBundle mainBundle]] ;

        NSLog(@"Retain count before pushViewController:%d",VC.retainCount);//prints1 
        [self.navigationController pushViewController:VC animated:YES];
        NSLog(@"Retain count after pushViewController:%d",VC.retainCount);//prints 7
        [VC release];
        NSLog(@"Retain count after Release:%d",VC.retainCount);// prints 6
    }

В моем коде значение счета увеличивается аномально. Я много времени висела. любая помощь пожалуйста.

0
nl ja de
Вы не должны заботиться об этом по нескольким причинам. 1) Вы должны использовать ARC к настоящему времени. 2) Никогда не смотрите на счет сохранения для правильного управления памятью. 3) Вы не знаете внутреннюю реализацию UINavigationController , так что вы также не знаете, является ли этот preserveCount правильным или нет.
добавлено автор Scott Berrevoets, источник
Не беспокойтесь об этом :) keepCount - это всего лишь деталь реализации и не пот, что он говорит. Вам действительно нужно сосредоточиться только на вашем счетчике ссылок, который когда он выделен, скопирован или сохранен в вашем собственном коде.
добавлено автор Carl Veazey, источник
Dealloc не будет вызываться до тех пор, пока контроллер просмотров не выскочит из стека навигации в любом случае. Если у вас проблемы с управлением памятью, они не входят в этот код.
добавлено автор jrturton, источник
но в этом случае я забочусь о keepCount, потому что метод dealloc для ApplianceViewController не вызывается, поскольку keepCount не падает до нуля, и я сталкиваюсь с проблемами сбоя памяти после некоторых навигаций.
добавлено автор aaban tariq, источник
В настоящее время я забочусь о keepCount, потому что метод dealloc, ApplianceViewController, не вызывается (когда я вывожу его обратно), поскольку keepCount не падает до нуля.
добавлено автор aaban tariq, источник

2 ответы

Абсолютное удержание. Значение объекта бессмысленно.

Подробнее см. http://www.whentouseretaincount.com .

Показатели сохранения, которые вы видите, - это внутренние детали реализации фреймворков. Они, фактически, бессмысленны. Скорее всего, количество удержаний будет таким же высоким, как и в этом коде, потому что вы запутываете контроллер вида в анимацию, что требует нескольких ссылок и некоторых сложных проблем за кулисами.

Код, который вы отправили, не является проблемой.

Используйте инструмент «Выделения» с «Только ссылки на дорожку» и «Счет ссылок на дорожки». Затем воспроизведите утечку и перейдите в инвентарь событий сохранения/выпуска для рассматриваемого объекта. Это даст вам список точно, где объект будет сохранен (и выпущен), который точно скажет вам, почему он все еще находится в памяти.

1
добавлено

На самом деле у меня есть одно свойство

@property (неатомный, сохранить) IBOutLet UITableView myTableView;

Я получал ссылку от файла nib. Я только что заменил сохранение назначением. И проблема была решена.

0
добавлено