2012-01-25 2 views
4

내 응용 프로그램이 여러 독립 양식을 생성합니다. 일단 만들어지면 응용 프로그램은 응용 프로그램을 잊어 버립니다. 모든 작업은 해당 양식 자체에서 처리됩니다. 응용 프로그램이 닫히면 양식도 닫힙니다. RTS가 가정합니다. OnClose 이벤트 나 OnDestroy 이벤트가 발생하지 않아 메모리 누수가 발생하지 않는다는 점만 제외하면 괜찮습니다. 어떤 양식이 존재하는지 관리 할 수는 있지만 (실제로는 그렇듯이) 실제로 애플리케이션은 이러한 양식을 완전히 잊어야합니다.응용 프로그램이 닫힐 때 양식에 이벤트가 발생합니까

응용 프로그램 기본 양식이 아닌 양식 내부를 감지하여 응용 프로그램이 닫히는 중입니까?

+0

(예 : 코드가 'halt'또는 ExitProcess()를 호출하는 등의 경우에도 응용 프로그램이 종료되면 메모리 누수가 없어야합니다. OS는 아무것도 표시하지 않으면 양식을 먹지 않습니다. 않습니다. 이 점을 제외하고는 Destroy가 호출되지 않도록하기 위해 매우 열심히 노력해야합니다. 응용 프로그램은 양식 목록을 유지하고 응용 프로그램을 닫으면 모두 삭제합니다. –

+0

@ Martin, 열심히 노력할 필요는 없습니다. 나는'Create'의 인자로'nil'을 사용하여 폼을 생성했습니다. David의 대답은 이것이 좋은 생각이 아니라는 것을 상기시켜주었습니다 :-) – Arnold

답변

6

양식이 삭제되면 OnDestroy 이벤트가 발생합니다. 이것은 폼의 파괴 코드에서 호출됩니다. 따라서 유일한 결론은 양식이 파기되지 않고 누출된다는 것입니다.

분명 몇 가지 방법이 당신의 독립적 인 형태가 유출되지 않도록 할 수 있습니다 : 당신이 다음 만들 때

  1. 이 양식의 소유자 매개 변수로 Application 또는 MainForm 중 하나를 전달합니다. 소유자가 파괴되면 양식을 포함하여 자신이 소유 한 모든 것을 파괴합니다.
  2. Application.Run 호출 후 예를 들어 주 양식 소멸자 또는 .dpr 파일에서이 양식을 명시 적으로 파괴하십시오.

옵션 1이 가장 일반적으로 사용되는 방법입니다.

+0

@DavidHeffeman, 첫 번째 해결책은 내 문제를 해결했습니다. 고마워요! – Arnold