Очень странное поведение dealloc - не вызывать

Я проверил все методы loadloc для viewControllers. И все они правильно вызываются при вызове popViewControllerAnimated.

Но только один метод dealloc контроллера не вызывается. Я не могу понять проблему.

Нажимая на этот контроллер, я правильно написал следующий код:

AController *contr = [AController alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:contr animated:YES];
[contr release];

и когда я возвращаюсь из контроллера, я написал:

[self.navigationController popViewControllerAnimated:YES];

Это действительно странное поведение, потому что этот код написан на многих контроллерах и работает правильно.

6 ответов

Решение

Если его не называют, он все еще жив. Попробуйте использовать инструменты, чтобы найти его. Если вы используете инструмент распределения в инструментах, вы сможете найти класс (по имени) в списке распределений и посмотреть, жив он или нет. Вы даже можете видеть, кем (я притворяюсь, что классы являются людьми) это сохраняется.

Если dealloc не вызывается, у вас может быть другой объект, который его сохраняет.

Убедитесь, что объект, который может использовать этот делегат, не сохраняет его.

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

Этот замечательный пост в блоге обязательно нужно прочитать людям, находящимся в такой ситуации:

http://www.reigndesign.com/blog/debugging-retain-cycles-in-objective-c-four-likely-culprits/

У меня была похожая проблема, я хотел показать UIViewController в течение примерно 3 секунд (экран авторских прав). Так что я, по сути, называл PushViewCOntroller а также popViewController из основного файла и dealloc мне не звонили, когда я высовывал контроллер представления.

Затем я переключился с pushViewCOntroller на

[self.navigationController presentModalViewController:copyrightView animated:NO];

а также

[self.navigationController dismissModalViewControllerAnimated:NO];

и это начало работать.

Я не знаю, как это может решить проблему; но это сделал.

Для меня использование autorelease при выделении viewcontroller работало, надеюсь, это поможет кому-то

[[AController alloc]initWithNibName:nil bundle:nil]autorelease];

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

Другие вопросы по тегам