如下例子:
a控制器又一个assign的bool属性值Key为yes,然后a又一个推出它的控制器b,b又有一个推出b的控制器c;
下面做一个操作,a控制器一直回退至c推出,并且将a属性key的值传过去:
a.key = yes;
[a dismiss:no block:^(){ [b dismiss:no block:^(){ nslog(@"%@",a.key) } ] } ];
打印出来,key是no,为什么呢?因为在a执行dismiss之后,a可能已经被释放了,在b的dismiss的回调里,再去使用它,当然访问不到了,因为a已经为nil了,所以打印的的时候也是nil了,(这样的情况,大多发生在block里弱引用变量的时候)这点要注意.
解决方法,可以使用临时变量存储一下,例如:
a.key = yes;
bool tempKey = a.key;
[a dismiss:no block:^(){ [b dismiss:no block:^(){ nslog(@"%@",tempKey) } ] } ];
这样就可以解决,也不会引起强引用环的问题.
更多问题,加群讨论:565191947