Насколько надежным является 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, вы можете положиться на это, иначе оно не будет работать или не сломается в некоторых странных случаях.