Очень странное поведение dealloc - не вызывать - PullRequest
5 голосов
/ 24 февраля 2012

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

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

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

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

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

[self.navigationController popViewControllerAnimated:YES];

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

Ответы [ 6 ]

19 голосов
/ 24 февраля 2012

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

7 голосов
/ 24 февраля 2012

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

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

2 голосов
/ 29 мая 2014

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

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

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

1 голос
/ 08 августа 2012

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

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

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

и

[self.navigationController dismissModalViewControllerAnimated:NO];

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

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

0 голосов
/ 06 ноября 2015

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

0 голосов
/ 05 сентября 2014

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

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