Мое приложение для iOS основано на навигации со следующей структурой:
@interface ViewControllerA : UIViewController
@property (strong,nonatomic) ViewControllerB *viewControllerB;
@property (strong,nonatomic) ViewControllerC *viewControllerC;
...
viewControllerB
и viewControllerC
создаются до того, как navigationController
ViewControllerA
подтолкнет их.
Насколько я понимаю, все, что сохраняется в ViewControllerA
, должно быть установлено на ноль в ViewControllerA
viewDidUnload
. Должен ли я сделать то же самое с дочерними контроллерами представления? Нравится:
-(void)viewDidUnload
{
self.viewControllerB=nil;
self.viewControllerC=nil;
}
Я обнаружил проблему, когда от viewControllerC
инициировалось «предупреждение о полученной памяти». После этого был вызван viewDidUnload
родительского контроллера представления (т.е. viewControllerA
), тем самым установив nil в 'viewControllerB'. Неожиданно также вызывается viewDidUnload из viewControllerB. Итак, я получил «сообщение, отправленное освобожденному объекту», если я установил nil для подвидов viewControllerB
(в viewControllerB
viewDidUnload
).
Означает ли это, что я не должен устанавливать nil для дочерних контроллеров представления? Как лучше всего управлять памятью в этой ситуации?
P.S. Я использую АРК.