我已经创建了一个实现UITextFieldDelegate
的类,因此只需要使用[MyDelegateClass setDelegate:textField someConfigparams:...]
即可使用它。在其中将创建一个对象并分配给textFieldDelegate
。
释放时出现问题:setDelegate
中的UITextField
方法不会保留该对象,因此我不能只是自动释放它。我可以在外部保留一个引用来发布它,但是它很丑陋并且容易出错,因为我需要在委托类之外做额外的工作。子类化UITextField
是一个不好的选择,因为我需要始终使用可能与其他子类冲突的子类。
在销毁UITextField
对象时,有什么方法可以不用依赖MyDelegateClass外部的代码来释放委托对象?
最佳答案
我假设[MyDelegateClass setDelegate:textField someConfigparams:...]创建MyDelegateClass的实例,并将该实例分配为所提供textField上的委托。我要做的是使MyDelegateClass的实例成为单例,这意味着只有1个实例。
基本上,在这种情况下将发生的事情是MyDelegateClass将保留对自身的单个静态实例的强引用,并且只要您的应用程序保持活动状态,或者直到您有意释放它,该实例将保持活动状态。一个对象的一个实例作为许多textField的委托是完全可以的。拥有一个此类的单个实例对内存的影响将始终是恒定的,即不会增长,并且非常小。