默认情况下,UIView在nextResponder
函数中返回其UIViewController - 如果有的话。我认为UIView必须拥有对UIViewController的引用。
如果是这样,它不会导致它们之间的循环引用,因为UIViewController也持有对UIView的引用?
---更新-----------
我注意到UIView有一个名为_viewDelegate
的私有成员,它是UIViewController。有谁知道这是如何分配的?
---更新-----------
我发现在加载视图并将其分配给视图控制器时,其_viewDelegate
属性同时指向视图控制器。所以这可能发生在didSet
属性的view
事件中。
根据属性_viewDelegate
的名称,它应该是一个委托,我猜通常是weak
引用。
答案 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。)
您看到的引用可能会被懒惰加载,或者只是临时缓存的值。