gpt4 book ai didi

objective-c - UIView如何防止retain cycle?

转载 作者:行者123 更新时间:2023-12-05 05:25:46 25 4
gpt4 key购买 nike

subview 有对父 View 的引用,而父 View 也有对 subview 的引用( subview )。

我想知道为什么这不会导致保留周期?

最佳答案

UIViewsuperview 属性声明为

@property(nonatomic, readonly) UIView *superview;

在 Objective-C 中,没有不同的所有权说明符声明的属性 默认是 assign strong 自引入 ARC 以来,默认情况下,然而,UIKit header 似乎没有使用 ARC,所以这个属性最像 assign。另请注意,由于该属性是只读的,因此源中很可能有自定义 getter,因此属性中的所有权说明符不一定会告诉我们任何信息。可以安全地假设 Apple 已经以避免保留周期的方式实现它。

assign 等价于__unsafe_unretained,是一个非归零弱引用。这意味着它不保留对象,但在对象被释放时不会被设置为nil。这比 weak 具有更高的性能(因为它不需要检查和清零),但不安全,因为如果引用的对象被释放,您可能会访问垃圾内存。

另请注意,该属性被声明为readonly,这意味着它实际上可以实现为返回私有(private)实例变量的方法,或者执行我们完全不知道的其他事情。基本上,重要的是您可以假设此属性不保留它引用的对象

在今天的新代码中,您应该使用 weak 而不是 assign

关于objective-c - UIView如何防止retain cycle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29997800/

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