我一整天都在閱讀關於保留週期的更多信息,並開始迷惑自己。所以我只想檢查幾件事情。 (只是爲了說明,我正在使用ARC)當在弱指針上調用getter並將其傳遞給方法時,保留循環可能性
所以我們假設我有MyFirstClass
。 MyFirstClass
具有強烈指向(默認)實例變量MyChildClass
:
MyChildClass *_child;
MyFirstClass
還具有吸附材料(在.H公開可用的),像這樣:
-(MyChildClass *)child
{
return _child;
}
現在讓我們說我有另一完全類,MySecondClass
。 MySecondClass
具有弱實例變量指向MyFirstClass
像這樣:
還有就是同時擁有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];
}
這是否全部對應CT?我90%確定這很好,但我感到困惑。
當我使用_firstClass.child
時,那麼這是否會創建一個強大的指針呢?我應該在該方法調用中的某處引用__weak
? MySecondChildClass
的初始化過程如何?在設置實例變量之前,它有一個臨時指針MyChildClass
,這是否會創建一個我應該擔心的強指針?
任何澄清將是偉大的。
好吧,太好了。我覺得我很迷惑自己。我其實也有A'和B'指向他們的父母的某些原因,我使用__weak指針。那否則會導致保留週期,雖然正確?當試圖刪除A或B. –
是的,從你描述這個的方式來看,如果A'保持強烈的迴應A,你將會有一個保留週期。 –