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:
parent
fd8668e46b
commit
462bc04863
@ -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!"
|
||||
|
Loading…
Reference in New Issue
Block a user