web-dev-qa-db-ja.com

UITextFieldをクリアする最良の方法

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

textFieldX.text = nil

または

textFieldX.text = @"";

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

大したことではなく、私がコミュニティに尋ねると思いました。ありがとう。

28
Brenden

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

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

33

私は通常textFieldX.text = @"";わかりやすくするために。これは、値が文字列である必要があること、およびすべての標準文字列メソッドを渡すことができることを思い出すのに役立ちます。

8
Dan Lorenc

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

 wordTextField.textAlignment = UITextAlignmentCenter;
 //wordTextField.text = @"";
 wordTextField.text = nil;
 translationTextField.textAlignment = UITextAlignmentCenter;
 //translationTextField.text = @"";
 translationTextField.text = nil;
4
wzbozon

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

悪魔の支持者を演じるために、私はコンパイラがオプションBを最適化して、とにかくオプションAのようなことを行うと想定します。個人的には、オプションBを常に実行します。これは、実行したい最終操作まではより読みやすいためです。

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

clearButtonMode

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

@property(nonatomic)UITextFieldViewMode clearButtonMode

討論

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

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

これにより、ユーザーがテキストフィールドをクリアする機能を設定できるようになると思います。

2
TahoeWolverine

textField.text = nil;は私のプロジェクトに望ましくない影響を及ぼします。電卓を作っています。

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

textField.text = @""; 

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

0
Tander