aClass.aString = @"A";
self.aLabel.text = aClass.aString;
如果我将aClass.aString更改为“B”,也希望self.aLabel.text自动更改为“B”。
这个怎么运作?
是否存在我可以在 aClass.aString 和 self.aLabel.text 之间建立的强链接?我知道在objective-c、delegate和KVO中有一些方法可以做到这一点,但是它有很多事情要做,有什么简单的方法吗?
aClass.aString = @"A";
self.aLabel.text = aClass.aString;
如果我将aClass.aString更改为“B”,也希望self.aLabel.text自动更改为“B”。
这个怎么运作?
是否存在我可以在 aClass.aString 和 self.aLabel.text 之间建立的强链接?我知道在objective-c、delegate和KVO中有一些方法可以做到这一点,但是它有很多事情要做,有什么简单的方法吗?
你必须自己管理。如果您查看UILabel
text
属性 ( link ) 的定义,您会看到它复制了字符串内容,正是出于这个原因:
@property(nonatomic, copy) NSString *text
您可以为该aString
属性编写自定义 setter 方法:
- (void)setAString:(NSString *)aString
{
_aString = aString;
self.aLabel.text = aString;
}
(如果您遵循让clang
为您生成支持实例变量和访问器方法的当前趋势,那么您可能需要显式声明这个特定的,即使用名为的实例变量_aString
)。
除了覆盖 setter 方法之外的另一种方法,
- (void)setAString:(NSString *)aString
正在使用 KVO 来观察字符串值的变化。
[self addObserver: self
forKeyPath: @"aString"
options: NSKeyValueObservingOptionNew
context: NULL];
实现这个方法。每当字符串值更改时,都会调用它。
-(void) observeValueForKeyPath: (NSString *)keyPath ofObject: (id) object
change: (NSDictionary *) change context: (void *) context
{
//Set the label's text with new value.
}
您可能希望使用此处更好地解释的机制:
它的要点是没有好的方法可以做到这一点。但是,使用 NSNotificationCenter 并监听特定更改有一些混乱的方法。
UI 绑定本身在 iOS 上不存在(这是我从 Mac OS X 转换到 iOS 时最大的震惊)。