nixzhu / dev-blog

翻译、开发心得或学习笔记
https://apps.apple.com/cn/app/ducky-model-editor/id1525505933
3.94k stars 709 forks source link

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

Open wuhongxing opened 7 years ago

wuhongxing commented 7 years ago

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

nixzhu commented 7 years ago

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

wuhongxing commented 7 years ago

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

nixzhu commented 7 years ago

应该是某个闭包把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 https://github.com/nixzhu/dev-blog/issues/30#issuecomment-295644089, or mute the thread https://github.com/notifications/unsubscribe-auth/AAakCFoBjBVOacQ7nkKcAayJzm7i7dOGks5rxyBmgaJpZM4NCgKk .

wuhongxing commented 7 years ago

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

nixzhu commented 7 years ago

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