我整天都在阅读更多关于保留周期的内容,我开始感到困惑。所以我只想检查几件事。(只是为了澄清,我使用的是 ARC)
所以假设我有MyFirstClass
. MyFirstClass
有一个强烈指向的(默认情况下)实例变量MyChildClass
:
MyChildClass *_child;
MyFirstClass
还有一个 getter(在 .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;
它有一个自定义初始化来设置它:
-(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
这是否会创建一个我应该担心的强指针?
任何澄清都会很棒。