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


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章