From: David Elliott Date: Wed, 2 Jul 2003 20:46:34 +0000 (+0000) Subject: It was not acceptable to call the class method from the static initializer X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/462bc04863a27a56a75faf72c20977a2e958c2a5 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 --- diff --git a/include/wx/cocoa/ObjcPose.h b/include/wx/cocoa/ObjcPose.h index b5e53c0ab6..3697cecf7d 100644 --- a/include/wx/cocoa/ObjcPose.h +++ b/include/wx/cocoa/ObjcPose.h @@ -17,19 +17,18 @@ Objective-C Poser class initialization -------------------------------------------------------------------------*/ #ifdef __OBJC__ #import +#import 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!"