Как стать автором
Обновить

Комментарии 5

Спойлеры порой поджидают в самых неожиданных местах…

UIAppearance запоминает все NSInvocation, произошедшие с appearance-объектом, и потом воспроизводит их на реальных инстансах. Поэтому всё должно работать с вообще любыми вызовами любых селекторов. Но отсюда побочный эффект: если к примеру сделать два раза "setColor:" с разными цветами, то и на реальном инстансе произойдёт оба этих вызова. Поэтому, например, переключение разноцветных тем в приложении сделать не получится: при переключениях тем эти NSInvocation будут накапливаться и накапливаться. В принципе, всё это можно понять просто распечатав appearance-proxy объект в отладчике (или распечатав его _ivarDescription, уже не вспомнить)

Спасибо за дополнение.
Однако, это всего лишь ответ на вопрос «почему это происходит». Ответа на вопрос «как это вообще допустили» он, к сожалению, не даёт.

Самый главный момент, от которого у меня бомбит, — это бесполезность флага UI_APPEARANCE_SELECTOR, который по сути — не более, чем просто пометка, что с помеченным свойством можно спокойно использовать Appearance, а с не помеченным — тоже можно, но никто ничего не гарантирует.

Но в отличие от тех же force unwrap в Swift, которые тоже можно использовать на свой страх и риск, неправильное использование свойства через Appearance, легко может поломать не только твой код, но и код в компонентах, которыми ты не владеешь. Без регистрации, смс и свизлинга.
> если к примеру сделать два раза «setColor:» с разными

это если пользователь будет играться с темами? но после рестарта приложения данного эффект а ведь не будет?
всё так
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории