31

の場合、IBOutlet UITextFieldメモリ管理またはその他の理由でテキスト値をクリアする方法は重要ですか?

textFieldX.text = nil

また

textFieldX.text = @"";

nilObjective-c では、オブジェクトにメッセージを送信することは許容され@""、 staticNSString *です。すべて@""がメモリ内の同じオブジェクトを指しているのか、それとも 1 バイトの null で終了する文字列の束を割り当てているのかはわかりません。

大したことではありませんが、コミュニティに聞いてみようと思いました。ありがとう。

4

5 に答える 5

35

個人的には、ここでのメモリ使用量は少なく、コードの保守性を重視すると思います。

私にとって、ラベルに常に文字列があることは理にかなっています。将来、誰かがラベルの値を追加したり、データベースに保存したり、xml にラップしたりしようとするかもしれません。この場合、空の NSString は 0x0 よりもはるかに理にかなっています。

于 2009-07-22T22:40:22.303 に答える
9

私は通常textFieldX.text = @"";、明確にするためだけに行います。これにより、値は文字列である必要があり、すべての標準文字列メソッドを渡すことができることを思い出すことができます。

于 2009-07-22T22:40:02.803 に答える
4

@ ""を使用すると、プレースホルダーが中央に配置されないことがわかったため、nilを使用することをお勧めします(配置する必要がある場合)。プレースホルダーを正しく配置するためにコードをどのように変更したかを見てください。

 wordTextField.textAlignment = UITextAlignmentCenter;
 //wordTextField.text = @"";
 wordTextField.text = nil;
 translationTextField.textAlignment = UITextAlignmentCenter;
 //translationTextField.text = @"";
 translationTextField.text = nil;
于 2011-07-05T12:01:39.380 に答える
2

文字列は常に Objective-C でコピーされるため、2 番目のオプションは、別の文字列を作成してからそれを指す可能性が高いです。そういう意味では、あなたは正しいと思います。

悪魔の擁護者を演じるために、コンパイラがオプション B を最適化して、とにかくオプション A のようなことを行うと仮定します。個人的には、達成したい最終操作に関しては読みやすいので、常にオプション B を使用します。

更新: 別の方法で目標を達成する方法は見つかりませんでしたが、この情報に興味があるかもしれません ( Apple UITextField Docsから):

clearButtonMode

標準のクリア ボタンがテキスト フィールドに表示されるタイミングを制御します。

@property(nonatomic) UITextFieldViewMode clearButtonMode

討論

ユーザーがテキストをすばやく削除できるように、標準のクリア ボタンがテキスト フィールドの右側に表示されます。このボタンは、このプロパティに設定された値に基づいて自動的に表示されます。

このプロパティのデフォルト値は UITextFieldViewModeNever です。

これにより、ユーザーがテキスト フィールドをクリアするための機能をセットアップできると思います。

于 2009-07-22T22:39:50.837 に答える
0

textField.text = nil;を使用すると、プロジェクトに望ましくない影響があることがわかりました。電卓を作っています。

上記のコードを使用すると、クリアボタンを押した後、数字を押しても画面に表示されません。

textField.text = @""; 

私にとってはうまくいきます。

于 2012-07-11T13:48:13.650 に答える