我遇到了一个奇怪的问题,导致MonoTouch出现内存泄漏。以下是我的设置。
CaseTabController - UITabBarController
-- CaseMediaItemsController - UIViewController
-- CaseInfoController (irrelevant) - UIViewController
子控制器以选项卡形式显示。我想从子控制器中向父
UITabBarController
添加一些NavigationItem
。然而,当我访问ParentViewController
时,引用被维护,使我的对象保持活动状态,永远不会被垃圾回收。仅仅将以下代码添加到子UIViewController的ViewDidLoad
中就会导致内存泄漏。var ni = ParentViewController.NavigationItem;
ni = null;
我的父级UITabBarController可能永远不会被处理,因为我的子选项卡引用了它。以下是HeapShot的输出。
有从子标签访问ParentViewController:
![HeapShot with memory leak](https://istack.dev59.com/VbEBc.webp)
![HeapShot without memory leak](https://istack.dev59.com/VtS3K.webp)
有任何想法,为什么CaseMediaItemsController在访问ParentViewController时保持对CaseTabController的引用?