2008-10-14 3 views
2

분산 된 개체 (DO)와 통신하는 두 개의 코코아 프로세스가있는 설치가 있습니다. 클라이언트가 가비지 수집을 사용 중이며 서버가 아닙니다.Cocoa Distributed Objects, GC 클라이언트, non-GC 서버

클라이언트가 직접적인 참조가 아닌 멀리있는 객체에 멈추는 것 같습니다. 이것은 객체에 대한 참조가 없는데도 NSDistantObjectTableEntry가 소유하고있는 객체 주위에 매달린다는 것을 의미합니다. 분명히 그들은 서버에서 할당 해제되지 않습니다.

클라이언트가 종료 될 때만 먼 모든 개체를 놓을 수 있습니다. 수동으로 연결을 끊는 것은 가능하지만 클라이언트가 실행되는 동안 연결을 원하지 않습니다.

GC'd DO 클라이언트가 더 이상 로컬에서 참조되지 않는 먼 개체를 놓아 버리도록 지시하는 방법이 있습니까?

+0

클라이언트가 응용 프로그램 또는 명령 줄 도구입니까? –

+0

둘 다 일반적인 GUI 응용 프로그램입니다. –

+0

흥미롭게도 나는 오늘날 비슷한 문제를 발견하지 못했습니다. 양쪽 모두 GC를 사용하고 있지 않습니다 (버그를 일으키지 않았 음). 내 질문에 체크 아웃 (http://stackoverflow.com/questions/2521514/memory-management-with-objective-c-distributed-objects-my-temporary-instances-li/2521526#2521526) 및 예제를 게시했습니다. 당신이 말한 것처럼, 연결을 수동으로 깨는 것은 작동하지만 이것은 옳지 않은 것처럼 보입니다. DO가 작동하는 방식에 근본적으로 빠진 것이 있습니까? – jkp

답변

1

클라이언트와 서버에 걸쳐 유지주기가있을 수 있습니다. 즉 클라이언트 객체가 클라이언트 객체의 프록시를 유지하는 서버 객체의 프록시를 보유하고 있습니다.

두주기가 더 복잡하면 진단주기가 더 복잡해 지므로 유지주기가 매우 간단합니다.

다른 DO 관련 gotchas의 예를 들어 The Subtle Dangers Of Distributed Objects을 참조하십시오.