2009-05-31 10 views

答えて

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!  
} 
+0

私はopがこれを尋ねようとしたとは思っていませんが、なぜ、変更可能なオブジェクトの値だけを変更できないので、ラベルの文字列を変更してラベルに通知する必要はありません。受け入れられた答えを見て、あなたはそれをよりよく理解するでしょう。 – guenis

+0

ええ、大丈夫、私は今それを見ることができます。このページには、私が心に留めている質問があり、私の意見は曇っていたと思います。けっこうだ!私の答えを落とすか? – NHDaly

+0

私は理解している、ええ、あなたはあなたの答えを取ることができます(もちろん、あなたがする必要はありません) – guenis

関連する問題