已知两个对象循环引用的话是无法释放的,那如果出现以下问题该如何解决呢?
刚刚被面试没答上来,现在很好奇这个问题,求解答。
当时我答了“使用代理方式”,但是还被要求答出其他方法。
求解答,多谢。
obj1.p = obj2;
obj2.p = obj1;
已知两个对象循环引用的话是无法释放的,那如果出现以下问题该如何解决呢?
刚刚被面试没答上来,现在很好奇这个问题,求解答。
当时我答了“使用代理方式”,但是还被要求答出其他方法。
求解答,多谢。
obj1.p = obj2;
obj2.p = obj1;
首先,简单合理的解决方案是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
所以,解决问题的办法挺多~
为工程师推荐兼职,详情点我头像
2 回答1k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答2.7k 阅读
1 回答1.5k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答1.1k 阅读
这些知识都是挺基础,加油,多看看基础知识。
weak reference
swift 中闭包还有一个概念
[owned self]