Conditionally use a weak reference in -setKeyPath:onObject:

But only if the object's class does not override -allowWeakReference. If
-allowWeakReference is overridden, take that as the canary in the coal mine and
don't use a weak reference.