2013-10-29 78 views
0

比方說,你必須有一個的viewController:iOS的:簡單的保留週期

@property (strong) object* A 
@property (strong) object* B 

然後故意創建在somepoint一個保留週期,沒有定時器,這樣

self.A.someStrongProperty = self //retain cycle 

問題:假設包含這些屬性的VC被釋放,保留週期或內存泄漏是否會持續?

+0

...這是一個簡單的任務,沒有保留週期。 – Kevin

+0

對不起,讓我改述 –

回答

0

是的,如果您保留self您正在導致一個保留週期。

這將導致self實例未被釋放,導致內存泄漏。

爲了防止出現這種情況,您可以使用weak屬性,或者在某些時候手動設置someStrongPropertynil,以打破保留週期。

+1

不,A正被重新分配指向B. – Kevin

+0

'-setA:'在分配'_A = B'時強烈保留'B',這不是問題。 –

+2

首先,這是ARC,'_A = B'確實保留'B'。其次,'A'是指向對象'* A'的指針,'B'是指向對象'* B'的指針。所有'self.A = self.B'確實是釋放'* A'並保留'* B'。 – Kevin

1

在上面發佈的代碼中,沒有保留週期。

保留週期可能是self.A = self;或更可能是self.A.someStrongProperty = self

編輯:在上面編輯的情況下,假設self是一個視圖控制器,它不會因保留週期而釋放。您應該將您的someStrongProperty更改爲weak屬性,這將防止保留週期。