It was not acceptable to call the class method from the static initializer

because it caused the load and initialize methods to be called.  Some of the
load and initialize methods used autorelease which would lead to warnings
about memory leaks (true, though very benign).
This version delays all Objective-C calls until InitializePosers().


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21585 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott 2003-07-02 20:46:34 +00:00
parent fd8668e46b
commit 462bc04863

View File

@ -17,19 +17,18 @@ Objective-C Poser class initialization
-------------------------------------------------------------------------*/
#ifdef __OBJC__
#import <objc/objc-class.h>
#import <Foundation/NSObjcRuntime.h>
class wxPoseAsInitializer
{
public:
wxPoseAsInitializer(Class poser)
: m_poser(poser)
, m_next(sm_first)
wxPoseAsInitializer()
: m_next(sm_first)
{
sm_first = this;
}
~wxPoseAsInitializer()
virtual ~wxPoseAsInitializer()
{
class_poseAs(m_poser,m_poser->super_class);
sm_first = m_next;
}
static void InitializePosers()
@ -40,7 +39,6 @@ public:
}
};
protected:
Class m_poser;
wxPoseAsInitializer *m_next;
static wxPoseAsInitializer *sm_first;
};
@ -52,7 +50,15 @@ public:
};
#define WX_IMPLEMENT_POSER(poser) \
wxDummyForPoseAsInitializer wxDummyPoseAsInitializerFor##poser(new wxPoseAsInitializer([poser class]))
class wxPoseAsInitializerFor##poser: public wxPoseAsInitializer \
{ \
protected: \
virtual ~wxPoseAsInitializerFor##poser() \
{ \
class_poseAs([poser class],[poser superclass]); \
} \
}; \
wxDummyForPoseAsInitializer wxDummyPoseAsInitializerFor##poser(new wxPoseAsInitializerFor##poser)
#else // __OBJC__
#warning "Objective-C++ Only!"