tags: 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 先释放。