gpt4 book ai didi

ios - 为什么有些 Outlet 被强引用,即使文档指定 outlet 应该是弱引用

转载 作者:技术小花猫 更新时间:2023-10-29 10:33:41 24 4
gpt4 key购买 nike

大家好,我是 iOS 编程的新手。 我知道什么是强引用和弱引用。但是当我必须处理网点时,我很困惑应该使用哪种类型的引用。在阅读了说明

的文档之后

Outlets should generally be weak, except for those from File’s Owner to top-level objects in a nib file (or, in iOS, a storyboard scene) which should be strong.

因此,在完成上述陈述后我了解到,我们创建的 Outlet 默认情况下通常应该是弱的

但在研究一些教程时,我遇到了代码人们在其中声明了一个 socket 作为强引用。例如考虑以下代码:

@interface AboutViewController : UIViewController

@property (nonatomic, strong) IBOutlet UIWebView *webView;

@end

代码:

@property (nonatomic, strong) IBOutlet UIWebView *webView;

说我们的 AboutViewController 有一个 UIWebView 对象

但为什么我们在这里需要 UIView 对象的强引用??正如文件所述,这不应该是一个弱引用吗?

另外请在我上面引用的文档声明中解释顶级对象的文件所有者是什么意思?

我在这个网站上经历过很多类似的问题,但没有一个能帮助我消除疑虑。所以请帮助。提前致谢:)

最佳答案

非顶级 GUI 元素使用什么 - 强或弱 - 取决于您将如何使用它们的导出。如果你有一个弱引用

@property (nonatomic, weak) IBOutlet UIWebView *webView;

然后在调用方法之后

[webView removeFromSupeview];

你的 webView 将是 nil 并且不可能仅仅通过添加来恢复 UIWebView

[self.view addSubview:webView];

如果这适合您 - 最好使用 weak,因为您将在不需要时释放 webView 的内存。

另一方面,在 strong 引用的情况下

[webView removeFromSupeview];

webView 仍然有 referenceCount > 0 并且只有当所有者明确释放它时 webView 才会被释放

self.webView = nil;

或在所有者的

- (void)dealloc

连同所有者本身。

如果您有静态 GUI,通常没有区别。如果你想删除(而不是隐藏)一些 View 添加能够稍后添加它们 - 应该使用强引用。

顶层对象应该强保留。喜欢

@property(nonatomic,retain) UIView *view;

在 UIViewController 中。

关于ios - 为什么有些 Outlet 被强引用,即使文档指定 outlet 应该是弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21846943/

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