首页 > ios如何解决循环引用问题

ios如何解决循环引用问题

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

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

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


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


弱引用就可以了。


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

【热门文章】
【热门文章】