我有一个设置,其中有两个Cocoa进程,与分布式对象(DO)进行通信。客户端正在使用垃圾收集,服务器不是。
似乎客户端挂在我直接引用它们之外的远处对象上。这意味着即使在我没有对象的引用之后,它们也会被NSDistantObjectTableEntry所拥有。显然他们没有在服务器上取消分配。
只有当客户端退出时,才会释放所有远程对象。手动断开连接可能也有效,但我不想在客户端运行时这样做。
有没有办法告诉GC'd DO客户端放弃那些本地没有引用的远程对象?
答案 0 :(得分:1)
可能存在跨越客户端和服务器的保留周期 - 即客户端对象保留服务器对象的代理,而服务器对象又保留客户端对象的代理。
这是保留周期的一个非常简单的例子,当涉及两个以上的对象时,诊断会变得更加复杂。
有关其他与DO相关的问题,请参阅The Subtle Dangers Of Distributed Objects。