0

我一整天都在閱讀關於保留週期的更多信息,並開始迷惑自己。所以我只想檢查幾件事情。 (只是爲了說明,我正在使用ARC)當在弱指針上調用getter並將其傳遞給方法時,保留循環可能性

所以我們假設我有MyFirstClassMyFirstClass具有強烈指向(默認)實例變量MyChildClass

MyChildClass *_child; 

MyFirstClass還具有吸附材料(在.H公開可用的),像這樣:

-(MyChildClass *)child 
{ 
    return _child; 
} 

現在讓我們說我有另一完全類,MySecondClassMySecondClass具有弱實例變量指向MyFirstClass像這樣:

還有就是同時擁有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]; 
} 

這是否全部對應CT?我90%確定這很好,但我感到困惑。

當我使用_firstClass.child時,那麼這是否會創建一個強大的指針呢?我應該在該方法調用中的某處引用__weakMySecondChildClass的初始化過程如何?在設置實例變量之前,它有一個臨時指針MyChildClass,這是否會創建一個我應該擔心的強指針?

任何澄清將是偉大的。

回答

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" 

那麼接下來你的照片看起來是這樣的,如果正確讀出你的問題:

​​

如果圖片匹配你寫什麼,那麼就沒有保留週期那裏,你不應該因此不需要任何這些引用的要弱。

+0

好吧,太好了。我覺得我很迷惑自己。我其實也有A'和B'指向他們的父母的某些原因,我使用__weak指針。那否則會導致保留週期,雖然正確?當試圖刪除A或B. –

+0

是的,從你描述這個的方式來看,如果A'保持強烈的迴應A,你將會有一個保留週期。 –

相關問題