Свойства, как правило, путь. Они дают вам силу KVC / KVO
Вы должны установить класс в качестве наблюдателя свойства Foo (KVO). Тогда каждый раз, когда Foo меняется, у вас есть шанс с этим справиться. Не нужно беспокоиться о несоответствии.
[self addObserver:self forKeyPath:@"foo" options:0 context:@"fooChanged"];
Тогда наблюдайте за изменением:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if([keyPath isEqualToString:@"foo"]){
//do your thing
}
}
Теперь не имеет значения, установлен ли foo в инициализаторе или через некоторое время, вы можете справиться с этим. Вы не хотите, чтобы ваш код прерывался, заставляя любые объекты работать с вашим классом в предопределенном порядке. Это очень негибкая и, как правило, плохая практика. Таким образом, вы можете изящно справиться с этими изменениями.