ios: improve KVO handle