UITextView
の内部実装はNSString
を使用しますが、内容が頻繁に変更されることがある場合はNSMutableString
を使用しないのはなぜですか?なぜUITextViewはテキストプロパティにstringを使用できますか?
2
A
答えて
5
一般的なコーディングの観点から:
プロパティを設定するとき、プロパティ設定メソッドが呼び出されます。こうすることで、コントロールが新しいコンテンツでコントロールを再描画できるように、プロパティが変更されたときにコントロールに通知することができます。
プロパティが可変オブジェクトの場合、その内容を変更することができます。コントロールはこれが発生したことを通知しないため、コントロールを再描画する必要があることはわかりません。
0
これは、外部クラスが私的な可変変数にアクセスすることを許可するのではなく、変更不可能なオブジェクトを渡すための一般的なパターンです。 NSArrayやNSDictionaryのようなコレクションクラスでも同じことが分かります。
0
もちろん、それが何を指しているのかを変更できない理由はありません!メンバーは単なるポインタなので、必要に応じて文字列を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!
}
関連する問題
- 1. なぜOpenOfficeのカーソルオブジェクトからテキストプロパティにアクセスできますか?
- 2. なぜUILabelのテキストプロパティを設定できないのですか?
- 3. なぜ[UITextView "setText"]をNSThreadで使用できないのですか?
- 4. なぜUITextView/UITextFieldはiOSでUITextInputを実装できないのですか
- 5. Stringはなぜ最終的ですか?
- 6. なぜHibernate STRINGを解決できないのですか?
- 7. DataObject.SetText(String)で空の文字列を使用できないのはなぜですか?
- 8. std :: stringで変換関数を使用できないのはなぜですか?
- 9. SQLite用のクラスでList of Stringを使用できますか?
- 10. なぜ、__cache_hash_codeは、std :: __ unordered_mapにのみ使用できますか?
- 11. IPv4アドレスにv-stringを使用できますか?
- 12. UITextViewを使用するときにキーボードを隠す方法は?
- 13. "filter"から$ sce.trustAsHtml(string)を使用できますか?
- 14. なぜStringを使用してStringBuilderオブジェクトを初期化できないのですか?
- 15. 「?」を使用できないのはなぜですか?オペレーター?
- 16. strerrorを使用できないのはなぜですか?
- 17. $ session_start()を使用できないのはなぜですか?
- 18. read()にstd :: stringを使用することはできますか?
- 19. なぜ私はVisual C++の関数 "string timeToStr(string);"を宣言できないのですか?
- 20. なぜUITextViewでフレームの最後までカーソルが届かないのですか
- 21. public static void main(String [] [] args)を使用できますか?
- 22. IList(Of IList(Of String))を使用できますか?
- 23. はなぜUITextViewがスクロールされていませんか?
- 24. プライベートタイプでautoを使用できるのはなぜですか?
- 25. #includeなしでstd :: stringを使用できる<string>?ここで
- 26. 「hash( 'md5'、 'string')」が「md5( 'string')」よりも高速なのはなぜですか?
- 27. なぜこのUITextViewインスタンスの.layer.borderWidthにアクセスできないのですか? (コードが添付されています)
- 28. なぜスーパーユーザーだけがCREATE EXTENSION hstoreを使用できますが、Herokuでは使用できませんか?
- 29. JavaでString [] argsが必要なのはなぜですか?
- 30. C#でDateTimeにNULLを使用できないのはなぜですか?
私はopがこれを尋ねようとしたとは思っていませんが、なぜ、変更可能なオブジェクトの値だけを変更できないので、ラベルの文字列を変更してラベルに通知する必要はありません。受け入れられた答えを見て、あなたはそれをよりよく理解するでしょう。 – guenis
ええ、大丈夫、私は今それを見ることができます。このページには、私が心に留めている質問があり、私の意見は曇っていたと思います。けっこうだ!私の答えを落とすか? – NHDaly
私は理解している、ええ、あなたはあなたの答えを取ることができます(もちろん、あなたがする必要はありません) – guenis