造成循环引用的原因:
比如在main函数中创建了两个类的对象A和B,现在引用计数都是1.现在让A和B互相引用(A有一个属性是B对象),属性说明是retain,B有一个属性是A的对象,属性说明是retain),现在两个对象的引用计数都增加1,都变成2.
现在执行[A release]; [B release]; 此时创建出来得main函数已经释放了自己对对象的持有权,但此时A和B的引用计数都还是1,因为他们互相引用了。
这时你发现A和B将无法释放,因为想要释放A必须先释放B,在B的的dealloc中再释放A,同理要释放B,必须先释放A,在A的dealloc中释放B,所有这两个对象一直存在内存中而不释放,这就是所谓的循环引用的问题
要想解决这个问题,一般的方法可以将引用的属性设置为assign,而不是retain来处理。
时间: 2024-11-05 15:59:20