У меня есть приложение, которое отображает бесконечное количество ViewControllers и анимирует каждый новый, после примерно 30 VC происходит сбой приложения из-за нехватки памяти.После дальнейших экспериментов я обнаружил, что деструктор в экземпляре ViewController никогда не вызывается.
~TargetPromptController(){
Console.WriteLine("Destructor Called!");
}
Код для перехода на новый VC:
public void PageFlipRight(UIViewController aController) {
aController.View.Frame = new System.Drawing.RectangleF(0, 0, 659, 630);
aController.ViewWillAppear(true);
if (activeRightController != null) activeRightController.ViewWillDisappear(true);
rightView.AddSubview(aController.View);
if (aController.View is BaseRightView)
((BaseRightView)aController.View).SetLocation(new PointF(0, 0), CurrentOrientation);
aController.ViewDidAppear(true);
UIView.BeginAnimations(null);
UIView.SetAnimationDuration(1.0);
UIView.SetAnimationTransition(UIViewAnimationTransition.CurlUp, rightView, true);
UIView.CommitAnimations();
NSTimer.CreateScheduledTimer(new TimeSpan(0, 0, 0, 0, 500),
delegate {
if (activeRightController != null) {
activeRightController.View.RemoveFromSuperview();
activeRightController.ViewDidDisappear(true);
activeRightController.Dispose();
}
activeRightController = aController;
GC.Collect();
});
}
Я перепробовал все.Вызов GC.Collect()
вручную, вызов Dispose()
вручную для всех подпредставлений, удаление подпредставлений, отмена регистрации обработчиков событий ... кажется, что виртуальный канал не может освободить свою память.Есть ли способ, которым я могу отпустить его вручную?Или что-то еще мне не хватает?Очень расстроен, я приветствую любую помощь.