我有一個應用程序,在大約30個VC由於內存不足而崩潰之後,會爲每個新的ViewControllers和動畫顯示無限量的ViewControllers和動畫。經過進一步的實驗,我發現ViewController實例上的析構函數從未被調用過。Monotouch Garbage Collectiton Not Working - Bug?
~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()
,刪除子視圖,取消註冊事件處理程序......沒有任何東西似乎讓VC發佈它的內存。有沒有辦法我可以手動發佈它?還是有什麼我失蹤?非常沮喪,我歡迎任何幫助。
很難說一目瞭然,但事件(其中您的對象是***目標***是經典的原因 – 2011-03-13 20:07:22
一個可能的解決方案是保存和重用先前丟棄的視圖控制器對象,類似於完成table view cells – hotpaw2 2011-03-13 20:11:06
這不僅僅是一個可能的解決方案,它可能是更好的解決方案。有一個原因,UITableView不僅僅是alloc/dealloc單元,而是重用它們 - 後者效率更高。 – lxt 2011-03-13 21:14:46