2

2 つの Cocoa プロセスがあり、分散オブジェクト (DO) と通信するセットアップがあります。クライアントはガベージ コレクションを使用していますが、サーバーは使用していません。

クライアントは、私の直接参照の外側にある遠く​​のオブジェクトにしがみついているようです。これは、オブジェクトへの参照がなくなった後でも、オブジェクトは NSDistantObjectTableEntry によって所有されていることを意味します。明らかに、それらはサーバー上で割り当て解除されません。

クライアントが終了したときにのみ、離れたすべてのオブジェクトを手放します。接続を手動で切断することもおそらくうまくいくでしょうが、クライアントの実行中にはそうしたくありません。

ローカルで参照されなくなった遠いオブジェクトを手放すように GC された DO クライアントに指示する方法はありますか?

4

1 に答える 1

1

クライアントとサーバーにまたがる保持サイクルが存在する場合があります。つまり、クライアント オブジェクトがサーバー オブジェクトのプロキシを保持しており、サーバー オブジェクトがクライアントのオブジェクトのプロキシを保持しています。

これは保持サイクルの非常に単純な例です。3 つ以上のオブジェクトが関係している場合、診断がより複雑になります。

他の DO 関連の落とし穴の例については、分散オブジェクトの微妙な危険性を参照してください。

于 2010-07-11T15:54:08.903 に答える