KVO Improvements in macOS Big Sur
Saw this in the release notes
Key-Value Observation removal facilities now employ deterministic bookkeeping methods. Cases that would have produced hard-to-diagnose crashes, especially those where KVO signals problems accessing deallocated observer pointers or observers associated with incorrect objects, now produce an exception pinpointing which observed object needs a missed
removeObserver(_:)
call, and by which observers. This exception was previously thrown as ‘best effort’ when KVO could detect the problem; the new deterministic bookkeeping allows it to be thrown for all cases whereremoveObserver(_:)
is needed.The improved determinism also allows improved Swift API handling. Instances of
NSKeyValueObservation
, produced by the SwiftNSObject.observe(_:changeHandler:)
method, take advantage of integration with this bookkeeping so they now invalidate automatically when the observed object is released, regardless of how the object implements its KVO behavior. This applies to all usage of this API in macOS 11 Big Sur beta, including on processes built with previous versions of the SDK, and eliminates certain classes of crashes that sometimes required using the legacy API instead. (65051563)
It is great that we are getting these debugging enhancements. KVO can be very tricking to debug.