记一次iOS循环引用

记一次项目中其他人写的控制器中的循环引用。
写代码注重质量,发现问题当然想如何解决。
记录一次情形和解决方法,提升效率。


情形

Controller在第一次退出时,不执行dealloc方法。而第二次进入时,却执行了dealloc方法。

原因

Controller通过block获取地理信息,同时又将单例持有block,导致Controller不释放。
当第二次进入时,重新设置了单例block,故执行前一个Controller的dealloc方法。

解决

获取地理信息后,主动将单例持有的block=nil,打破循环。

总结

当出现类似的循环引用时,可往单例的强引用考虑。

你可能感兴趣的:(记一次iOS循环引用)