用 Swift 实现轻量的属性监听系统
wuhongxing opened this issue · 5 comments
wuhongxing commented
当我第二次push到ThirdViewController的时候,我再次修改他的名字和颜色第二个页面和第三个页面都没有变化,但是我发现他们的值确实是变化了,而当我pop回第一个页面设置的值才生效!
nixzhu commented
Demo 太久远了,bindNameListener 的实现有缺陷。
nameListenerSet.insert 不会更新同名的元素,可改为先 remove,再 insert,强制更新。
或者把 nameListenerSet 改为字典实现,应该很容易的。
wuhongxing commented
我是根据你Yep上面的UserDefault里面的listener写的,按你这样写确实没有问题,但是controller的deinit()不执行!等我第二次进入该控制器deinit()才被执行(一进入就被执行)
nixzhu commented
应该是某个闭包把self持有了,不知道你的具体代码如何?注意用[weak self]
wuhongxing <notifications@github.com>于2017年4月20日 周四17:07写道:
…
我是根据你Yep上面的UserDefault里面的listener写的,按你这样写确实没有问题,但是controller的deinit()不执行!等我第二次进入该控制器deinit()才被执行(一进入就被执行)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#30 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AAakCFoBjBVOacQ7nkKcAayJzm7i7dOGks5rxyBmgaJpZM4NCgKk>
.
wuhongxing commented
我在闭包里面持有了self.namebutton导致了无法释放,我写了一个demo,地址:https://github.com/wuhongxing/Listener
,大神帮我看看还有没有什么问题!
nixzhu commented
用 [weak self]
就应该没问题了。你再在deinit里加一句打印,确保pop后观察到对应Controller的释放即可。