从代码设计的角度来看,为什么内部实现会UITextView
使用NSString
而不是NSMutableString
当其内容经常更改时?
问问题
666 次
3 回答
5
从一般编码的角度来看:
设置属性时,会调用属性设置器方法。这样,控件能够在属性更改时注意到,以便它可以使用新内容重绘控件。
如果属性是一个可变对象,你可以改变它的内容并且控件不会得到任何通知这已经发生了,所以它不知道控件需要被重绘。
于 2009-05-31T23:44:16.860 回答
0
传递不可变对象而不是允许外部类访问私有可变变量是 Cocoa 中的一般模式。你会在 NSArray 和 NSDictionary 等集合类中看到同样的情况。
于 2009-06-01T00:11:45.227 回答
0
当然,你没有理由不能改变它所指向的东西!因为成员只是一个指针,所以您可以根据需要将字符串替换为NSMutableString
自己。
如果您想将大量文本附加到视图中,这可能是一种更有效的方法。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[myTextView setText:[[NSMutableString alloc] init]];
}
return self;
}
只要确保仍然调用 setText ,因为正如@Guffa 在他的回答中解释的那样,否则视图将不知道重绘自己。
- (void)appendText:(NSString*)text
{
NSMutableString *dispText = (NSMutableString*)[myTextView text];
[dispText appendString:text];
[myTextView setText:dispText]; // notify myTextView of text change!
}
于 2013-04-21T01:23:58.937 回答