1

我创建了一个实现的类,UITextFieldDelegate所以我只需要[MyDelegateClass setDelegate:textField someConfigparams:...]使用它就可以使用它。在里面它将创建一个对象并分配给textFieldDelegate.

释放时出现问题:setDelegate方法中UITextField没有保留对象,所以我不能只是自动释放它。我可以在外面保留一个引用来发布它,但它很难看并且容易出错,因为我需要在委托类之外做额外的工作。子类化UITextField是一个糟糕的选择,因为我需要始终使用这个可能与其他子类发生冲突的子类。

有什么方法可以在UITextField对象被销毁时释放委托对象而不依赖于 MyDelegateClass 之外的代码?

4

1 回答 1

0

我假设 [MyDelegateClass setDelegate:textField someConfigparams:...] 创建 MyDelegateClass 的实例并将该实例分配为提供的 textField 上的委托。我要做的是使 MyDelegateClass 的实例成为单例,这意味着只有 1 个实例。

基本上在这种情况下会发生什么,MyDelegateClass 将保留对自身单个静态实例的强引用,并且只要您的应用程序保持活动状态或直到您有意释放它,该实例就会保持活动状态。让一个对象的一个​​实例成为许多文本字段的委托是完全可以的。让这个类的单个实例处于活动状态对内存的影响始终是恒定的,即不会增长,而且非常小。

于 2012-05-22T18:13:21.463 回答