iOS:UIView是否持有对其UIViewController的引用?

时间:2015-08-29 16:19:55

标签: ios uiview uiviewcontroller

默认情况下,UIView在nextResponder函数中返回其UIViewController - 如果有的话。我认为UIView必须拥有对UIViewController的引用。

如果是这样,它不会导致它们之间的循环引用,因为UIViewController也持有对UIView的引用?

---更新-----------

我注意到UIView有一个名为_viewDelegate的私有成员,它是UIViewController。有谁知道这是如何分配的?

enter image description here

---更新-----------

我发现在加载视图并将其分配给视图控制器时,其_viewDelegate属性同时指向视图控制器。所以这可能发生在didSet属性的view事件中。

根据属性_viewDelegate的名称,它应该是一个委托,我猜通常是weak引用。

1 个答案:

答案 0 :(得分:3)

  

UIView是否持有对其UIViewController的引用?

UIView可能会也可能不会保存对UIViewController的引用,但这是一个内部实现细节。它没有记录,不应该依赖。

  

如果是这样的话,不会导致它们之间的循环引用,因为UIViewController也持有对UIView的引用?

这是最简单意义上的循环引用,但不一定是强引用循环保留循环。也就是说,内部参考可以是.when('/employers/jobs/:myId',{ templateUrl : '/myTemplate/employers/jobs.html', controller : 'employersJobController' }) weak,也可以在适当的时候手动设置为unsafe_unretained

但可能并不总是存储引用。像这样的代码可以遍历响应者链并找到最近的视图控制器:

nil

(代码来自UIView+PSPDFKitAdditions.m。)

您看到的引用可能会被懒惰加载,或者只是临时缓存的值。