Facebook open-sources KVOController – simpler key-value observing for iOS
github.com
github.com
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 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
Here's the discussions between us regarding the swizzling magic (that Facebook also does here) 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
New test to ensure dealloc of observed objects runs: https://github.com/seivan/SHKeyValueObserverBlocks/pull/2
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.
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!
This usage pattern is quite common. We'll look into calling this out more explicitly in the readme. Thanks for the feedback!
Also it seems like keeping track of the additional controller objects would be a PITA.
Performing the initial callback manually, avoiding the KVO initiated one, was shown to be a performance improvement under certain KVO configurations.
We've updated the readme to include an example tracking the controller object. An instance variable should all that is necessary: https://github.com/facebook/KVOController.
Please elaborate. I've been re-implementing KVO, and have not seen this. What configurations?
Also, adding a controller ivar/property is rather invasive, don't you think?