KVO (наблюдение ключ / значение) может сделать это, вроде как, но в конечном итоге это будет еще больше кода, и, вероятно, не проще для чтения или записи.
Возможно, вы знакомы с KVO, но если вы (или другие) не знакомы: в вашей функции init
вы бы сделали следующее:
[self addObserver:self forKeyPath:@"date" options:0 context:NULL];
Тогда вы бы реализовали это:
-(void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)context
{
if (object == self && [keyPath isEqualToString:@"date"]) {
// code to touch the dateField goes here
}
}
Наконец, в dealloc
вы бы сделали это:
[self removeObserver:self forKeyPath:@"date"];
Как видите, это еще больше кода, и его сложнее понять. Не очень эффективно для того, чья цель - быть ленивым :-) Но KVO - это основная функция Objective-C для привязки данных. Существуют некоторые платформы (например, Flex), которые могут связывать данные с гораздо меньшим количеством кода, но в Objective-C требуется много работы.
Кстати, ничего страшного, но пример кода, который вы показали, содержит ошибки - вероятно, он должен выглядеть примерно так:
- (void) setDate:(NSDate *)newDate {
if (date != newDate) {
[date release];
date = [newDate retain];
// my code to touch the dateField goes here
}
}