gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:49:32 26 4
gpt4 key购买 nike

默认情况下,UIView 在 nextResponder 中返回它的 UIViewController。功能 - 如果它有一个。我认为 UIView 必须持有对 UIViewController 的引用。

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

- - 更新 - - - - - -

我注意到 UIView 有一个名为 _viewDelegate 的私有(private)成员。 ,也就是 UIViewController。有谁知道这是怎么分配的?

enter image description here

- - 更新 - - - - - -

我发现当 View 被加载并分配给 View Controller 时,它的 _viewDelegate属性同时指向 View Controller 。所以这可能发生在 didSet view的事件属性(property)。

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

最佳答案

Does an UIView hold an reference to its UIViewController?



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

If so, won't it lead to a circular reference between them, since UIViewController also holds an reference to UIView?



这是最简单意义上的循环引用,但不一定是强引用循环或保留循环。也就是说,内部引用可以是 weakunsafe_unretained或手动设置为 nil在适当的时候。

不过,可能并不总是有存储的引用。像这样的代码可以遍历响应者链并找到最近的 View Controller :
// self is the view

UIResponder *responder = self;
while ((responder = [responder nextResponder])) {
if ([responder isKindOfClass:UIViewController.class]) break;
}
return (UIViewController *)responder;

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

您看到的引用可能是延迟加载的,或者只是临时缓存的值。

关于iOS:UIView 是否持有对其 UIViewController 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com