繁体   English   中英

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

[英]Retain cycle possibility when calling a getter on a weak pointer and passing it to a method

我整天都在阅读更多有关保留周期的内容,我开始迷惑自己。 所以我只是想检查几件事。 (只是为了澄清,我正在使用ARC)

所以我想说我有MyFirstClass MyFirstClass有一个强烈指向(默认情况下) MyChildClass实例变量:

MyChildClass *_child;

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

-(MyChildClass *)child
{
    return _child;
}

现在让我们说我完全有另一个类, MySecondClass MySecondClass有一个指向MySecondClass的弱实例变量, 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'

如果那张图片与你写的相匹配,那么那里就没有保留周期,因此你不应该需要任何这些参考文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM