Почему UITextView использует строку, а не изменяемую строку для своего свойства текста? - PullRequest
2 голосов
/ 01 июня 2009

Есть идеи с точки зрения разработки кода, почему внутренняя реализация UITextView использует NSString, а не NSMutableString, когда его содержание должно часто меняться?

Ответы [ 3 ]

5 голосов
/ 01 июня 2009

С общей точки зрения кодирования:

При установке свойства вызывается метод установки свойства. Таким образом, элемент управления может замечать, когда свойство изменяется, так что он может перерисовать элемент управления с новым содержимым.

Если свойство является изменяемым объектом, вы можете изменить его содержимое, и элемент управления не получит никакого уведомления о том, что это произошло, поэтому он не знает, что элемент управления необходимо перерисовать.

0 голосов
/ 21 апреля 2013

Конечно, нет причин, по которым вы не можете изменить то, на что оно указывает! Поскольку элемент является просто указателем, вы можете заменить строку на 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!    
}
0 голосов
/ 01 июня 2009

В Какао существует общая схема передачи неизменяемых объектов вместо того, чтобы разрешать внешним классам доступ к закрытым изменяемым переменным. То же самое вы увидите с классами коллекций, такими как NSArray и NSDictionary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...