[英]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;
有一个包含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'
如果那张图片与你写的相匹配,那么那里就没有保留周期,因此你不应该需要任何这些参考文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.