UIlabel - 将文本属性与另一个NSString链接

时间:2010-09-28 15:24:53

标签: iphone cocoa-touch uilabel

是否可以将UILabel文本属性与另一个NSString“链接”,以便在更改其他NSString时,UILabel文本属性是否也会更改?

示例:

UILabel *label = [[UILabel alloc] init];  
NSString *str = @"labelText1";  
label.text = str;  
str = @"labelText2"; //after this assignment label.text is still "labelText1"

2 个答案:

答案 0 :(得分:5)

在您的问题中,您没有“更改”任何对象 - NSString实例是不可变的,您刚才说某些变量指向一个实例而不是另一个实例。假设您的字符串实际上是某个其他模型对象的属性,您可以让控制器观察该属性(使用-observeValueForKeyPath:ofObject:change:context)并在每次看到更改时更新标签。

答案 1 :(得分:0)

不,你不能。 'text'的属性定义是: -

@property(nonatomic, copy) NSString *text

这意味着UILabel的setter方法会获取您指定的字符串的副本。如果它没有这样做你就永远无法将自动释放的字符串分配给UILabel,因为一旦你分配的原始字符串被释放,标签的文本就会消失或变得疯狂,你最终会对内存管理负责。 UILabel自己的文本,这不是一个好的情况。

答案是提供一些机制来在您感兴趣的字符串发生更改时更新标签的文本。正如@Graham Lee指出的那样,使用不可变字符串永远不会发生这种情况,但假设您的源文本在某处可变(比如游戏分数),那么只要发生这种情况就应该更新标签。同样,正如@Graham Lee指出的那样,Cocoa提供了观察员,代表和各种其他方法来使这一点变得相对容易。