Warum verwendet UITextView Zeichenfolge anstatt wandelbar Zeichenfolge für die Text-Eigenschaft?

StackOverflow https://stackoverflow.com/questions/933014

  •  06-09-2019
  •  | 
  •  

Frage

Jede Idee von einem Code-Design her, warum ein UITextView hat die interne Implementierung von NSString verwendet, aber keinen NSMutableString, wenn ihr Inhalt oft ändern gemeint?

War es hilfreich?

Lösung

Von einer allgemeinen Codierung Sicht:

Wenn Sie eine Eigenschaft der Eigenschaft Setter-Methode aufgerufen wird Einstellung. Auf diese Weise ist die Steuerung der Lage zu bemerken, wenn die Eigenschaft geändert wird, so dass er die Kontrolle mit dem neuen Inhalt neu zeichnen kann.

Wenn die Eigenschaft ein veränderbares Objekt ist, können Sie den Inhalt ändern und die Steuerung erhält keine Benachrichtigung, dass dies geschehen ist, so weiß er nicht, dass das Steuer Bedürfnisse neu gezeichnet werden.

Andere Tipps

Es ist ein allgemeines Muster in Cocoa laufen um unveränderliche Objekte anstelle außerhalb Klassen private Zugriff auf änderbare Variablen ermöglicht. Sie werden das gleiche mit Sammlungen Klassen wie NSArray und NSDictionary sehen.

Natürlich gibt es keinen Grund, warum Sie können nicht ändern, was er zeigt! Da das Element nur ein Zeiger ist, können Sie die Zeichenfolge mit einem NSMutableString selbst ersetzen, wenn Sie wollen.

Dies könnte einen effizienteren Ansatz sein, wenn Sie eine Menge Text zu der Ansicht angehängt werden sollen.

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [myTextView setText:[[NSMutableString alloc] init]];
    }
    return self;
}

Seien Sie sicher, noch setText zu nennen, weil als @Guffa in seiner Antwort erklärt, da sonst die Sicht wird nicht wissen, sich neu zu zeichnen.

- (void)appendText:(NSString*)text 
{
    NSMutableString *dispText = (NSMutableString*)[myTextView text];
    [dispText appendString:text];

    [myTextView setText:dispText]; // notify myTextView of text change!    
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top