我有一个基础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 );
}
}
我的问题是,使用当前代码,内存正在泄漏。我究竟做错了什么?
答案 0 :(得分:3)
MonoTouch 4.1测试版即将推出修复程序,暂时的解决方法是:
替换此行:
sender.View.RemoveFromSuperview();
使用:
var super = sender.View.Superview;
sender.View.RemoveFromSuperview ();
var scratch = super.Subviews;
下一个版本中的正确修复工作正常。为此道歉。
答案 1 :(得分:-1)
好的,从一开始就是愚蠢的问题。
如果您遇到同样的问题,请阅读一些关于PushViewController,PopViewControllerAnimated,ViewDidAppear,ViewDidDisappear和ViewDidLoad的内容。