我在我的项目中遇到了一个问题,并尝试创建一个示例项目来重现它,我能够.
https://bitbucket.org/theonlylawislove/xamarinnavigationcontrollermemoryleak
问题在于,当我呈现UINavigationController时,导航控制器或其根视图控制器永远不会被垃圾收集.它虽然在iOS模拟器中工作.为什么这种内存泄漏只发生在设备上?如果在设备上运行示例项目,则永远不会在调用的解构器中看到Console.WriteLine.
我正在使用XCode5和Xamarin.iOS 7.0.4.171(商业版)
这是我用来演示泄漏的AppDelegate.
[Register ("AppDelegate")] public partial class AppDelegate : UIApplicationDelegate { UIWindow window; public override bool FinishedLaunching (UIApplication app,NSDictionary options) { window = new UIWindow (UIScreen.MainScreen.Bounds); window.RootViewController = new UINavigationController(new RootController ()); window.MakeKeyAndVisible (); return true; } class RootController : UIViewController { public RootController () { NavigationItem.RightBarButtonItem = new UIBarButtonItem("Present",UIBarButtonItemStyle.Bordered,(o,e) => { PresentViewController(new NavigationController(),true,new NSAction(() => {})); }); } } class NavigationController : UINavigationController { public NavigationController () :base(new TestController()) { } ~NavigationController() { Console.WriteLine("~NavigationController"); } class TestController : UIViewController { ~TestController() { Console.WriteLine("~TestController"); } public override void ViewDidAppear (bool animated) { base.ViewDidAppear (animated); Task.Factory.StartNew (() => { Thread.Sleep(2000); NSThread.MainThread.InvokeOnMainThread(new NSAction(() => { dismissViewController(true,new NSAction(() => { })); })); }); } } } }