Because when you swizzle a method, you change the method for all instances of the class. A KVO notification setter is more expensive than a non-KVO notification setter, so you want to use a KVO notification setter for instances that are actually being observed, and not for all instances of the class.
What should the KVO property setting method do? At a minimum, he should check if any KVO observers are registered for this facility using [self observationInfo]. So a guaranteed additional message is sent. In addition, it observationInfois stored in the global global hash table by default , so a KVO-compatible setter must obtain a lock and perform a hash search - only to find out if registered KVO observers are registered.
setter, , .
Apple KVO KVO. KVO , KVO-. , , , KVO- .