OC 30 day
if(1)
{
Person *p1 = [Person new];
Book *b1 = [Book new];
}
這個時候記憶體是這樣分配的。
if(1)
{
Person *p1 = [Person new];
Book *b1 = [Book new];
p1.book = b1;
b1.owner = p1;
}
發生什麼事,Person 指著Book。Book 指著Person,誰都死不了。這個時候怎麼辦?
當兩個對象的指針被釋放掉時:
此時Person 沒有強指針指著他,因此他會被釋放。
此時,Book對象也沒有強指針指著他,因此他也會被釋放掉。
在ARC機制下,當兩個物件相互引用時,如果兩邊都使用strong 那麼就會不知道由誰先釋放。導致retain cycle。
改成weak 就知道從 weak 先釋放。