Контроллер корневого уровня в моем приложении для iPad - UISplitViewController. Таким образом, он имеет 2 контроллера вида:
- один главный контроллер представления (элемент 0 свойства viewControllers)
- один контроллер подробного представления (элемент 1 свойства viewControllers)
Контроллер подробного представления - это настраиваемый контроллер представления, который я меняю в зависимости от касаний и событий в моем главном контроллере представления.
Чтобы изменить этот подробный контроллер вида, я использую следующий код:
- (void)replaceSecondViewControllerBy:(UIViewController *)viewController {
[[self.viewControllers objectAtIndex:1] dismissModalViewControllerAnimated:NO];
NSArray *newVC = [NSArray arrayWithObjects:[self.viewControllers objectAtIndex:0], viewController, nil];
self.viewControllers = newVC;
}
Моя проблема в том, что, когда мое приложение получает событие предупреждения о памяти, метод didReceiveMemoryWarning
вызывается для всех моих контроллеров представления, за исключением для прежних контроллеров подробного представления. И они не освобождаются, потому что они все еще являются делегатами для других объектов (включая асинхронные методы, которые могут все еще выполняться).
Мои вопросы:
- Каковы правила для UIViewController для получения
didReceiveMemoryWarning
сообщения? Почему мои прежние контроллеры детального представления не получают их?
- Могу ли я безопасно вызвать
didReceiveMemoryWarning
или viewDidUnload
на этих старых контроллерах вида?