ios循环引用 - ios如何解决循环引用问题
天蓬老师
天蓬老师 2017-04-17 15:45:29
[iOS讨论组]

已知两个对象循环引用的话是无法释放的,那如果出现以下问题该如何解决呢?
刚刚被面试没答上来,现在很好奇这个问题,求解答。
当时我答了“使用代理方式”,但是还被要求答出其他方法。
求解答,多谢。

obj1.p = obj2;
obj2.p = obj1;
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
黄舟

这些知识都是挺基础,加油,多看看基础知识。
weak reference
swift 中闭包还有一个概念 [owned self]

巴扎黑

弱引用就可以了。

怪我咯

首先,简单合理的解决方案是week,但其实也不是绝对答案

--非week解决方案:

例如,如果

@interface user:xxx 
@property(strong)id obj1;
@property(strong)id obj2;
end

然后逻辑总如果有:

self.obj1.p = self.obj2;
self.obj2.p = self.obj1;

那么可以在user的dealloc方法里这么写

- (void)dealloc {
    self.obj1.p=nil;
    self.obj2.p=nil; 
}

那么其实不用week也是能解决的

--week解决方案:

根据业务逻辑判断obj2和obj1哪个会在代码中先释放,把先释放的p改为week

所以,解决问题的办法挺多~


为工程师推荐兼职,详情点我头像

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号