0

さて、私はUITextFieldを持っています。

その中には、プロパティUITextField.textがあります。

行っても大丈夫ですか:

// Assume we have UITextField * tf somewhere..
// now set its text..
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;

これに関する私の問題はメモリです。 UITextFieldのtextプロパティの古い値はどうなりますか。

あなたがする必要はありません:

// maintain reference to old NSString
NSString * oldTfText = tf.text ;

// set the value to the new value you want
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;

// release the old NSString now..
[ oldTfText release ] ;

通常のCと同じように、メモリ管理についてまだ考えています。これがここの欠陥である可能性があります。

4

2 に答える 2

2

UITextFieldは、古い値を解放する責任があります。あなたの懸念はあなたのコードだけにあり、あなたはこの割り当てられたNSStringを解放しなければならないということは正しいです。

自動リリースを使用して、余分な宣言を回避することもできます。

tf.text = [ [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] autorelease];
于 2009-11-02T17:11:57.120 に答える
0

tf.textはセッターです。ヘッダーファイルを見ると、プロパティが定義されています。

@property(nonatomic,copy) NSString *text;

したがって、このように設定し、システムに独自のコピーを処理させる必要があると思います。

mytext = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;
tf.text = mytext;
[mytext release];
于 2009-11-02T19:46:26.463 に答える