考虑一个基本的UIViewController,包含在UINavigationController或UITabBarController中。此视图控制器具有对其容器的引用,其中包含:
self.navigationController
self.tabBarController
现在考虑没有导航控制器或标签栏控制器的View Controller Containment的基本示例:
[self addChildViewController: child];
[[child view] setFrame: [[self view] bounds]];
[[self view] addSubview: [child view]];
[child didMoveToParentViewController: self];
如果我希望子视图控制器具有对容器的引用,那么这样做的最佳方法是什么?
我的猜测是我会在孩子身上做这样的事情:
@property (weak, nonatomic) MyContainerController *container;
并在我将孩子添加到父母的同时设置它,如下所示:
[child setContainer: self];
这是对的吗?
我想确保我可以从孩子那里引用容器,但我也担心内存问题。我相信强大的财产会阻止ARC释放孩子,即使我将其从容器中取出。这个假设是否正确?
答案 0 :(得分:1)
您已经拥有self.parentViewController的引用。没有必要创建自己的。查看UIViewController类引用的“获取其他相关视图控制器”部分。
答案 1 :(得分:0)
更新SWIFT 3
在Swift中,名称已更改为self.parent
,返回UIViewController可选。