在我的应用程序中,我有一个对象,它封装了通过 HTTP 与服务器的通信。如果服务器上发生更改,例如会话不再有效,或者有新消息给用户等,此对象会发出一些 HTTP 请求以“轮询”。
应用程序的 UI 对象必须将自己注册到通信对象,以通过 UI 对象实现的协议接收通知。注册是通过以下方法完成的:
[communicationObject addObserver: self];
并删除自身:
[communicationObject removeObserver: self];
通信对象将观察者存储在一个可变数组中。在某些情况下,UI 对象是在 UINavigationController 中推送的 UIViewController。在这种情况下,当用户回到父控制器时,UI控制器没有被释放,因为通信对象的观察者数组保留了它,并且UI控制器不能将自己从观察者中移除,因为dealloc方法永远不会被调用(明显地)。
问题:这个观察者通知器是一个糟糕的设计模式?有没有不使用viewWillDisappear方法检测到 UI 控制器被父控制器释放的方法?有解决此类情况的最佳实践吗?