3 ms·
Shameless plug. Here's mine https://github.com/seivan/SHKeyValueObserverBlocks#adding-observer-on-an-nsarray-to-keep-track-of-your-data-source https://github.c
by seivan 13y ago
Shameless plug.
Here's mine
https://github.com/seivan/SHKeyValueObserverBlocks#adding-observer-on-an-nsarray-to-keep-track-of-your-data-source https://github.com/seivan/SHKeyValueObserverBlocks#adding-ob...
Comes with bi- and uni-bindings.
I like mine better but I wouldn't have done the auto-removal of observers without Yan Raboviks swizzling magic https://github.com/rabovik/RSSwizzle https://github.com/rabovik/RSSwizzle credits due.
I set a toggle in case you feel that's too dangerous to shut it off - Something I use.
I compared a couple of ways of dealing with that, including writing some of my own and I think Yan does it the best.
When doing my own I had some discussions with James Montgomerie regarding race conditions and dealing with class hierarchies. He had solved with a different way here himself: https://github.com/th-in-gs/THObserversAndBinders https://github.com/th-in-gs/THObserversAndBinders
Here's the discussions between us regarding the swizzling magic (that Facebook also does here)
https://github.com/th-in-gs/THObserversAndBinders/commit/a4cff51e0e465427594328be91026bd223718622 https://github.com/th-in-gs/THObserversAndBinders/commit/a4c...
The pull requests leading up to me going with Raboviks library (due to better code and smarter implementation)
Test for infinite loop when deallocating:
https://github.com/seivan/SHKeyValueObserverBlocks/pull/5 https://github.com/seivan/SHKeyValueObserverBlocks/pull/5
New test to ensure dealloc of observed objects runs:
https://github.com/seivan/SHKeyValueObserverBlocks/pull/2 https://github.com/seivan/SHKeyValueObserverBlocks/pull/2
- kimon 13y agoThis is a useful collection of links. One point of note, Facebook's solution doesn't rely on swizzling. Much like THObserversAndBinders, KVOController ties observation to the controller scope. We use a shared controller instance, that acts as a receptionist for all KVO notifications, as well as a weak reference to the observer, in order to safely allow observer removal on dealloc.
- seivan 13y agoAh, thanks for correcting me. I didn't have time to go through it yet. https://github.com/facebook/KVOController#usage https://github.com/facebook/KVOController#usage By controller does the readme refer to the KVOController instance? I assume this is a property on the class that uses it, and once the class gets dealloced, its observer also get dealloced? FBKVOController Hmm... I think this is a much better idea! Much cleaner than what I current got going, but then again we don't offer the same api. Thanks for correcting me!
- kimon 13y agoCorrect. Add a strong reference from observer to KVOController instance via a property or instance variable and you've achieved un-observation on observer dealloc :) This usage pattern is quite common. We'll look into calling this out more explicitly in the readme. Thanks for the feedback!