Create an autorelease pool to catch objects created during several special situations, like customized initialization, so that we don't leak there.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62557 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Ollivier
2009-11-05 00:31:36 +00:00
parent a3873c6f9c
commit 32e806fe7f
2 changed files with 18 additions and 1 deletions

View File

@@ -22,6 +22,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowMac;
class WXDLLIMPEXP_FWD_CORE wxApp ; class WXDLLIMPEXP_FWD_CORE wxApp ;
class WXDLLIMPEXP_FWD_CORE wxKeyEvent; class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
class WXDLLIMPEXP_FWD_BASE wxLog; class WXDLLIMPEXP_FWD_BASE wxLog;
class WXDLLIMPEXP_FWD_CORE wxMacAutoreleasePool;
// Force an exit from main loop // Force an exit from main loop
void WXDLLIMPEXP_CORE wxExit(); void WXDLLIMPEXP_CORE wxExit();
@@ -36,7 +37,7 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
DECLARE_DYNAMIC_CLASS(wxApp) DECLARE_DYNAMIC_CLASS(wxApp)
wxApp(); wxApp();
virtual ~wxApp() {} virtual ~wxApp();
virtual void WakeUpIdle(); virtual void WakeUpIdle();
@@ -61,6 +62,7 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
protected: protected:
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
wxMacAutoreleasePool* m_macPool;
public: public:
@@ -80,6 +82,7 @@ public:
// we want to delete and cannot do it immediately // we want to delete and cannot do it immediately
// TODO change semantics to be in line with cocoa (make autrelease NOT increase the count) // TODO change semantics to be in line with cocoa (make autrelease NOT increase the count)
void MacAddToAutorelease( void* cfrefobj ); void MacAddToAutorelease( void* cfrefobj );
void MacReleaseAutoreleasePool();
public: public:
static wxWindow* s_captureWindow ; static wxWindow* s_captureWindow ;
static long s_lastModifiers ; static long s_lastModifiers ;

View File

@@ -1072,6 +1072,13 @@ wxApp::wxApp()
m_macCurrentEvent = NULL ; m_macCurrentEvent = NULL ;
m_macCurrentEventHandlerCallRef = NULL ; m_macCurrentEventHandlerCallRef = NULL ;
m_macEventPosted = NULL ; m_macEventPosted = NULL ;
m_macPool = new wxMacAutoreleasePool();
}
wxApp::~wxApp()
{
if (m_macPool)
delete m_macPool;
} }
CFMutableArrayRef GetAutoReleaseArray() CFMutableArrayRef GetAutoReleaseArray()
@@ -1087,6 +1094,13 @@ void wxApp::MacAddToAutorelease( void* cfrefobj )
CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj ); CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj );
} }
void wxApp::MacReleaseAutoreleasePool()
{
if (m_macPool)
delete m_macPool;
m_macPool = new wxMacAutoreleasePool();
}
void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event)) void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
{ {
// If they are pending events, we must process them: pending events are // If they are pending events, we must process them: pending events are