1

を実装するクラスを作成したUITextFieldDelegateので、使用[MyDelegateClass setDelegate:textField someConfigparams:...]するために使用するだけで済みます。その中にオブジェクトを作成し、に割り当てますtextFieldDelegate

解放時に問題が発生します。setDelegateメソッドUITextFieldはオブジェクトを保持しないため、自動解放することはできません。参照を外部に保持して解放することもできますが、デリゲート クラスの外部で追加の作業を行う必要があるため、見苦しく、エラーが発生しやすくなります。UITextField他のサブクラスと競合する可能性があるこのサブクラスを常に使用する必要があるため、サブクラス化は悪いオプションです。

UITextFieldMyDelegateClass の外部のコードに依存せずに、オブジェクトが破棄されたときにデリゲート オブジェクトを解放する方法はありますか?

4

1 に答える 1

0

[MyDelegateClass setDelegate:textField someConfigparams:...] が MyDelegateClass のインスタンスを作成し、そのインスタンスを提供された textField のデリゲートとして割り当てると仮定します。私がすることは、 MyDelegateClass のインスタンスをシングルトンにすることです。つまり、インスタンスは 1 つしかありません。

基本的にこの場合、 MyDelegateClass はそれ自体の単一の静的インスタンスへの強い参照を保持し、そのインスタンスは、アプリケーションが存続している限り、または意図的に解放するまで存続します。オブジェクトの 1 つのインスタンスを多くの textField のデリゲートにすることはまったく問題ありません。このクラスの 1 つのインスタンスが生きていることによるメモリへの影響は、常に一定です。つまり、増加せず、非常に小さくなります。

于 2012-05-22T18:13:21.463 に答える