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(() => { })); })); }); } } }}解决方法 这只是保守收集器的副作用,堆栈上可能有一些垃圾,但使用你的应用程序将消除垃圾并允许释放对象.
如果您使用使用精确系统的SGen,您将看到物体立即消失.
总结以上是内存溢出为你收集整理的内存泄漏 – Xamarin.iOS简单的NavigationController内存泄漏全部内容,希望文章能够帮你解决内存泄漏 – Xamarin.iOS简单的NavigationController内存泄漏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)