是否是循环引用与调用方法无关,只与引用关系有关。
在你的例子中,引用环为 vc --> mainModel --> netRequestCallBack --> vc。("-->"表示引用关系)
对象被释放的先决条件为该对象不被其他对象持有。而你的例子中vc被netRequestCallBack持有,所以不会被释放。
打破引用环的办法为使用__weak来声明被block捕获的变量。
即
__weak AUIViewController *tmpVC = vc;
vc.mainModel.netRequestCallBack = ^(NSError *error){
[[tmpVC navigationController] pushViewController:vc animated:YES];
};
而对于vc被释放的问题,在于vc没有被别的对象持有。正确的解决办法应该是从当前navigaionController或别的vc栈中,找到该vc,然后对该vc进行操作。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…