Насколько надежным является KVO с UIKit

Важно: не все классы KVO-совместимый для всех свойств. Вы может гарантировать, что ваши собственные классы KVO-совместимый, выполнив шаги описанных в "Соответствии KVO". Как правило, свойства Apple-поставляются рамки являются только KVO-совместимыми, если они документируются как таковые.

Это утверждение оставляет меня в замешательстве. Разве мы не можем использовать KVO для объектов UIKit? Я не помню, чтобы какое-либо свойство было задокументировано как совместимое с KVO. Несмотря на сказанное иначе, я могу использовать KVO со многими свойствами. Означает ли это, что я не могу полагаться на это?

Любое понимание этого было бы оценено.

Ответ 1

UIKit в основном НЕ соответствует KVO. Это происходит главным образом потому, что UIView действует как высокоуровневая оболочка для CALayer, поэтому, когда вы, например. измените свойство frame объекта UIView, оно изменит слои frame, но оставьте, например. bounds свойство UIView нетронутым, поэтому для пути view.bounds не будет запускаться наблюдатель, потому что он никогда не изменяется. И это приводит к несоблюдению KVO.

Только если свойство помечено как совместимое с KVO, вы можете положиться на это, иначе оно не будет работать или не сломается в некоторых странных случаях.