Вы можете переопределить метод установки / получения без необходимости изучать внутреннее состояние класса (т.е. ivars) - просто вызовите методы super в ваших переопределениях:
- (Thing *)thing {
// do your extra stuff here
// ...
return [super thing];
}
- (void)setThing:(Thing *)thing {
// do your extra stuff here
// ...
[super setThing:thing];
}
Альтернативой, которая может удовлетворить вашу проблему, является использование KVO .
Обновление
Конечно, переопределение setBounds
может не потребоваться. См. этот вопрос - layoutSubviews
вызывается при изменении кадра, а изменение границ приводит к тому, что размер кадра также обновляется. Так что подумайте над тем, чтобы поместить свой код в layoutSubviews
.
Окончательное обновление
Хорошо, вот почему Apple никогда не собирается внезапно объявить некоторые @property
элементы как имена нестандартных методов (как вы боитесь):
Это сломало бы все в магазине приложений.
Подумайте об этом так: во время компиляции любой код, который обращается к свойству с помощью точечной нотации, например синтаксический сахар obj.x
преобразуется в сообщение вида [obj x]
. Аналогично для свойств - они преобразуются во время компиляции в обычные методы. Итак, скомпилированные двоичные файлы ничего не знают о точечной нотации и свойствах - они просто вызывают обычные селекторы. Так что, если Apple выпустит обновление для iOS, которое объявит некоторые открытые свойства как нестандартные методы реализации, все в приложении Магазин может сломаться. Все. В этом сценарии нет ошибки от вашего имени, если ваше приложение сломалось, как и все остальное, - это вина Apple, а не ваша.