0

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

所以假设我有MyFirstClass. MyFirstClass有一个强烈指向的(默认情况下)实例变量MyChildClass

MyChildClass *_child;

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

-(MyChildClass *)child
{
    return _child;
}

现在假设我完全有另一堂课,MySecondClass. MySecondClass有一个弱实例变量指向MyFirstClass如下:

__weak MyFirstClass *_firstClass;

有一个父类同时拥有两者MyFirstClassMySecondClass因此MySecondClass只有一个弱引用,MyFirstClass因此它不会阻止父类在需要时释放它。

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

MySecondChildClass *_secondClassChild;

MySecondChildClass想要引用MyFirstClassMyChildClass对象。

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

__weak MyChildClass *_firstClassChild;

它有一个自定义初始化来设置它:

-(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这是否会创建一个我应该担心的强指针?

任何澄清都会很棒。

4

1 回答 1

2

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

我将这些对象称为 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'

如果该图片与您编写的内容相匹配,则那里没有保留周期,因此您不应该需要任何这些引用是弱的。

于 2013-02-08T02:02:05.283 回答