因对象释放导致,bool值无故变为no

如下例子:

   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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值