# iOS APP 开发 OC 第二十一天,ARC 下的循环引用

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


<<:  CIA作为安全目标(CIA as security objectives)

>>:  [Aras 笔记] Report报表-多阶BOM+替代料R1R2

Day 18: LeetCode 322. Coin Change

Day 18: LeetCode 322. Coin Change Tag: follow John...

第17天 - 来试着做一个简易购物系统(1)、补充昨天的登入程序码

补充 补充一下昨天登入相关程序,就是如果未登入成功,就会把使用者弹回登入画面(没登入无法直接打开该....

企划实现(27)

使用spinner并侦测 第一步:在values创建你要放在spinner的资料 第二步:在xml的...

Consistency and Consensus (4-3) - Coordination Services & Summary

续 Day 21 协调服务 (Coordination Services) 像 Apache Zo...

Day_26: 让 Vite 来开启你的Vue之 跌入深坑_ 我该用 reactive 还是 ref

Hi Dai Gei Ho~ 我是 Winnie ~ 在接下来最後三篇文章中,我们将要进入 Vue跌...