记一次项目中其他人写的控制器中的循环引用。
写代码注重质量,发现问题当然想如何解决。
记录一次情形和解决方法,提升效率。
情形
Controller在第一次退出时,不执行dealloc
方法。而第二次进入时,却执行了dealloc
方法。
原因
Controller通过block获取地理信息,同时又将单例持有block,导致Controller不释放。
当第二次进入时,重新设置了单例block,故执行前一个Controller的dealloc
方法。
解决
获取地理信息后,主动将单例持有的block=nil,打破循环。
总结
当出现类似的循环引用时,可往单例的强引用考虑。
网友评论