私は休閑コードMonoTouchでメモリリークのない現在のUIViewControllerを変更する適切な方法は何ですか?
[MonoTouch.Foundation.Register("NavController")]
public class NavController : UINavigationController
{
public static NavController Instance = new NavController();
public void ChangePage(UIViewController sender, UIViewController page, double duration)
{
this.PopViewControllerAnimated(true);
this.PushViewController(page, false);
//
SetViewControllers(new UIViewController[]{ page }, false);
if(sender != null)
{
sender.View.RemoveFromSuperview();
sender = null;
}
GC.Collect();
}
}
とシングルトンパターンを使用してベースUINavigationControllerクラス(XIB-少ないコード)を有し、また、私はこのような構造を持つ4つのUIWebControllerクラス
[Register("HomePage")]
public class AViewPage : UIViewController
{
UIButton btn = new UIButton(new RectangleF(0,0, 100, 100));
UIImageView img = new UIImageView(new RectangleF(100, 100, 200, 200);
//and a lot of other widgets
public override void ViewDidLoad()
{
base.ViewDidLoad();
//
btn.TouchUpInside += delegate{
AnotherViewPage page = new AnotherViewPage();
NavController.Instance.ChangePage(this, page, 1);
}
//
this.View.AddSubview(btn);
this.View.AddSubview(img);
}
}
を持っている私の問題があることです現在のコードでは、メモリが漏れています。私は間違って何をしていますか?
- Dispose(bool)をオーバーライドして、手動でUIWebControllerクラスのすべてを破棄する必要がありますか?
- 私はまた、このUIViewControllers上でUIImagesとUIImageViewsをたくさん持っている、それらを処分する適切な方法は何ですか?
- 私は、ChangePageの機能コードが醜いと感じています。より良い事例を教えてください。