Очень странное поведение 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];
В моем случае я назначил круговой тип объекта ссылки с сильной ссылкой. Переход на слабый тип исправил эту проблему. Попробуйте определить, какой объект сохраняется в памяти, используя инструменты, как сказано в других ответах.