Да - вполне допустимо связывать произвольное свойство с другим свойством.Это часто полезно для автоматического обновления пользовательского интерфейса, поэтому многие примеры Apple демонстрируют свойства элементов пользовательского интерфейса.Но привязки никак не ограничиваются объектами пользовательского интерфейса.Ниже приведен конкретный пример:
//
// AppDelegate.m
// StackOverflow
//
// Created by Stephen Poletto on 10/15/11.
//
#import "AppDelegate.h"
@interface ClassA : NSObject {
NSString *propertyA;
}
@property (copy) NSString *propertyA;
@end
@interface ClassB : NSObject {
NSString *propertyB;
}
@property (copy) NSString *propertyB;
@end
@implementation ClassA
@synthesize propertyA;
@end
@implementation ClassB
@synthesize propertyB;
@end
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
ClassA *a = [[ClassA alloc] init];
ClassB *b = [[ClassB alloc] init];
[a bind:@"propertyA" toObject:b withKeyPath:@"propertyB" options:nil];
// Now that the binding has been established, if propertyB is set on 'b',
// propertyA will automatically be updated to have the same value.
[b setPropertyB:@"My Message"];
NSLog(@"A's propertyA: %@", [a propertyA]); // Prints 'MyMessage'. Success!
}
@end
Обратите внимание, что bind: вызывается для экземпляра класса, а не для самого класса.Если вы новичок в Какао, вы должны знать, что привязки являются одним из наиболее сложных понятий, и вы должны убедиться, что вы понимаете KVC и KVO перед их использованием.