我整天都在阅读更多有关保留周期的信息,并且开始感到困惑。所以我只想检查几件事。 (为澄清起见,我使用的是ARC)
假设我有MyFirstClass
。 MyFirstClass
具有一个指向(默认情况下)MyChildClass
的实例变量:
MyChildClass *_child;
MyFirstClass
也有一个吸气剂(可在.h中公开),如下所示:-(MyChildClass *)child
{
return _child;
}
现在让我们说我完全有另一个课程,
MySecondClass
。 MySecondClass
具有指向MyFirstClass
的弱实例变量,如下所示:__weak MyFirstClass *_firstClass;
有一个同时包含
MyFirstClass
和MySecondClass
的父类,因此MySecondClass
只是对MyFirstClass
的弱引用,因此它不会阻止父类在需要时释放它。MySecondClass
也有自己的子类,也强烈引用了实例变量:MySecondChildClass *_secondClassChild;
MySecondChildClass
想要引用MyFirstClass
的MyChildClass
对象。所以我想我也在
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'
如果该图片与您写的内容匹配,那么那里就没有保留周期,因此您不需要这些引用中的任何一个都是弱的。