У меня есть базовый класс UINavigationController (код без xib), использующий шаблон синглтона со следующим кодом
[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();
}
}
А также у меня есть 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?
- У меня также есть много UIImages и UIImageViews на этих UIViewControllers, как это правильноутилизировать их?
- У меня такое ощущение, что код функции ChangePage уродлив.Помогите мне с лучшим примером, пожалуйста.