gpt4 book ai didi

ios - 在弱指针上调用 getter 并将其传递给方法时保留循环可能性

转载 作者:行者123 更新时间:2023-11-28 22:40:07 25 4
gpt4 key购买 nike

我一整天都在阅读更多关于保留周期的内容,我开始对自己感到困惑。所以我只想检查几件事。 (为了澄清起见,我使用的是 ARC)

假设我有 MyFirstClassMyFirstClass 有一个强指向(默认)实例变量到 MyChildClass:

MyChildClass *_child;

MyFirstClass 还有一个 getter(在 .h 中公开可用),如下所示:

-(MyChildClass *)child
{
return _child;
}

现在假设我有另一个完整的类,MySecondClassMySecondClass 有一个指向 MyFirstClass 的弱实例变量,如下所示:

__weak MyFirstClass *_firstClass;

有一个父类同时包含 MyFirstClassMySecondClass 所以 MySecondClass 只是对 MyFirstClass 的弱引用> 所以它不会阻止父类在需要时释放它。

MySecondClass 也有它自己的子类,也被实例变量强引用:

MySecondChildClass *_secondClassChild;

MySecondChildClass 想要引用 MyFirstClassMyChildClass 对象。

所以我想我在这里也使用了一个弱指针,在 MySecondChildClass 中:

__weak MyChildClass *_firstClassChild;

它有一个自定义的 init 来设置它:

-(id)initWithFirstClassChild:(MyChildClass *)firstClassChild
{
if(self = [super init]){
_firstClassChild = firstClassChild;
}
}

最后,MySecondClass 中有一个创建MySecondChildClass 的方法:

-(void)setupChild
{
_secondClassChild = [[MySecondChildClass alloc] initWithFirstClassChild:_firstClass.child];
}

这一切都正确吗?我 90% 确定这一切都很好,但我感到困惑。

当我使用 _firstClass.child 时,会创建指向它的强指针吗?我应该在该方法调用的某处引用 __weak 吗?在 MySecondChildClass 的初始化期间怎么样?在设置实例变量之前,它有一个指向 MyChildClass 的临时指针,这是否会创建一个我应该担心的强指针?

任何澄清都会很好。

最佳答案

我认为您在这里不需要任何弱引用。

我将这些对象称为 P、A、A'、B 和 B',其中:

P is an instance of your "Parent Class"
A is an instance of "MyFirstClass"
A' is an instance of "MyChildClass"
B is an instance of "MySecondClass"
B' is an instance of "MySecondChildClass"

那么你的图片看起来像这样,如果我没看错你的问题:

  /----> A ----> A'
/ ^ ^
P | |
\ | |
\----> B ----> B'

如果该图片与您所写的相匹配,那么那里就没有保留周期,因此您不应该需要任何弱引用。

关于ios - 在弱指针上调用 getter 并将其传递给方法时保留循环可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14764241/

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