なぜUITextViewは、テキストプロパティの変更可能な文字列ではなく文字列を使用していますか?

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

  •  06-09-2019
  •  | 
  •  

質問

UITextViewの内部実装は、その内容が頻繁に変更することを意図するNSStringではなくNSMutableStringを使用しない理由コードの設計の観点から、任意のアイデア?

役に立ちましたか?

解決

ビューの一般的な符号化の観点から

プロパティを設定する場合は、

プロパティのセッターメソッドが呼び出されます。そのようにコントロールが新しいコンテンツを持つコントロールを再描画することができるように、プロパティが変更されたときに気づくことができます。

プロパティが変更可能なオブジェクトである場合は、

、あなたはそれがコントロールを再描画する必要があることを知りませんので、その内容とコントロールは、これが起こったことをすべての通知を取得することはできません変更することができます。

他のヒント

これは、代わりに外部のクラスはプライベート可変変数にアクセスできるようにの周りに不変オブジェクトを渡すためにココアで一般的なパターンです。あなたがたNSArrayとNSDictionaryのようなコレクションクラスと同じものが表示されます。

もちろん、あなたはそれが指すものを変更することはできません理由はありません!メンバーだけのポインタであるので、あなた自身、あなたがしたい場合NSMutableStringで文字列を置き換えることができます。

あなたがビューに大量のテキストを追加したい場合、これは、より効率的なアプローチかもしれません。

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

ただ、まだ自分自身を再描画する@Guffaが彼の答えで説明したようにあるため、それ以外のビューは知らないだろうしのsetTextを呼び出してください。

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

    [myTextView setText:dispText]; // notify myTextView of text change!    
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top