use a __weak ref for setKeyPath