nixzhu/dev-blog

用 Swift 实现轻量的属性监听系统

wuhongxing opened this issue · 5 comments

当我第二次push到ThirdViewController的时候,我再次修改他的名字和颜色第二个页面和第三个页面都没有变化,但是我发现他们的值确实是变化了,而当我pop回第一个页面设置的值才生效!

Demo 太久远了,bindNameListener 的实现有缺陷。
nameListenerSet.insert 不会更新同名的元素,可改为先 remove,再 insert,强制更新。
或者把 nameListenerSet 改为字典实现,应该很容易的。

我是根据你Yep上面的UserDefault里面的listener写的,按你这样写确实没有问题,但是controller的deinit()不执行!等我第二次进入该控制器deinit()才被执行(一进入就被执行)

我在闭包里面持有了self.namebutton导致了无法释放,我写了一个demo,地址:https://github.com/wuhongxing/Listener,大神帮我看看还有没有什么问题!

[weak self]就应该没问题了。你再在deinit里加一句打印,确保pop后观察到对应Controller的释放即可。