KVO's API could be a lot better (even just making it target-action would be a huge improvement), but at the time it was created you couldn't do a block based API (since they didn't exist yet), and thread-safe automatic deregistration without zeroing weak pointers would be very complex and have a lot of overhead.