Add wxGCSafeRetain/wxGCSafeRelease to the vast majority of wxCocoa code.

Copyright 2008 Software 2000 Ltd.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@51585 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott
2008-02-08 00:35:39 +00:00
parent f42fc2c1a7
commit 08433260e8
6 changed files with 52 additions and 34 deletions

View File

@@ -27,6 +27,7 @@
#include "wx/cocoa/autorelease.h" #include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h" #include "wx/cocoa/string.h"
#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSBitmapImageRep.h> #import <AppKit/NSBitmapImageRep.h>
#import <AppKit/NSGraphics.h> #import <AppKit/NSGraphics.h>
@@ -74,6 +75,8 @@ wxBitmapRefData::wxBitmapRefData()
wxBitmapRefData::wxBitmapRefData( const wxBitmapRefData& data) wxBitmapRefData::wxBitmapRefData( const wxBitmapRefData& data)
{ {
wxAutoNSAutoreleasePool pool;
m_width = data.m_width; m_width = data.m_width;
m_height = data.m_height; m_height = data.m_height;
m_depth = data.m_depth; m_depth = data.m_depth;
@@ -81,13 +84,13 @@ wxBitmapRefData::wxBitmapRefData( const wxBitmapRefData& data)
m_numColors = data.m_numColors; m_numColors = data.m_numColors;
m_bitmapPalette = data.m_bitmapPalette; m_bitmapPalette = data.m_bitmapPalette;
m_quality = data.m_quality; m_quality = data.m_quality;
m_cocoaNSBitmapImageRep = [data.m_cocoaNSBitmapImageRep copyWithZone:nil]; m_cocoaNSBitmapImageRep = wxGCSafeRetain([[data.m_cocoaNSBitmapImageRep copyWithZone:nil] autorelease]);
m_bitmapMask = data.m_bitmapMask?new wxMask(*data.m_bitmapMask):NULL; m_bitmapMask = data.m_bitmapMask?new wxMask(*data.m_bitmapMask):NULL;
} }
wxBitmapRefData::~wxBitmapRefData() wxBitmapRefData::~wxBitmapRefData()
{ {
[m_cocoaNSBitmapImageRep release]; wxGCSafeRelease(m_cocoaNSBitmapImageRep);
m_cocoaNSBitmapImageRep = NULL; m_cocoaNSBitmapImageRep = NULL;
delete m_bitmapMask; delete m_bitmapMask;
@@ -193,8 +196,8 @@ void wxBitmap::SetNSBitmapImageRep(WX_NSBitmapImageRep bitmapImageRep)
if(!M_BITMAPDATA) if(!M_BITMAPDATA)
return; return;
// NOTE: No checking is done to make sure width/height agree // NOTE: No checking is done to make sure width/height agree
[bitmapImageRep retain]; wxGCSafeRetain(bitmapImageRep);
[M_BITMAPDATA->m_cocoaNSBitmapImageRep release]; wxGCSafeRelease(M_BITMAPDATA->m_cocoaNSBitmapImageRep);
M_BITMAPDATA->m_cocoaNSBitmapImageRep = bitmapImageRep; M_BITMAPDATA->m_cocoaNSBitmapImageRep = bitmapImageRep;
} }
@@ -296,6 +299,8 @@ int wxBitmap::GetHeight() const
bool wxBitmap::Create(int w, int h, int d) bool wxBitmap::Create(int w, int h, int d)
{ {
wxAutoNSAutoreleasePool pool;
UnRef(); UnRef();
m_refData = new wxBitmapRefData; m_refData = new wxBitmapRefData;
@@ -305,7 +310,7 @@ bool wxBitmap::Create(int w, int h, int d)
M_BITMAPDATA->m_depth = d; M_BITMAPDATA->m_depth = d;
/* TODO: create new bitmap */ /* TODO: create new bitmap */
M_BITMAPDATA->m_cocoaNSBitmapImageRep = [[NSBitmapImageRep alloc] M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain([[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: NULL initWithBitmapDataPlanes: NULL
pixelsWide: w pixelsWide: w
pixelsHigh: h pixelsHigh: h
@@ -316,7 +321,7 @@ bool wxBitmap::Create(int w, int h, int d)
colorSpaceName: NSCalibratedRGBColorSpace colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: 0 // NOTE: Contrary to Apple documentation Mac OS bytesPerRow: 0 // NOTE: Contrary to Apple documentation Mac OS
// 10.4 will add padding bytes when 0 is used here // 10.4 will add padding bytes when 0 is used here
bitsPerPixel: 0]; bitsPerPixel: 0] autorelease]);
wxLogTrace(wxTRACE_COCOA,wxT("M_BITMAPDATA=%p NSBitmapImageRep bitmapData=%p"), M_BITMAPDATA, [M_BITMAPDATA->m_cocoaNSBitmapImageRep bitmapData]); wxLogTrace(wxTRACE_COCOA,wxT("M_BITMAPDATA=%p NSBitmapImageRep bitmapData=%p"), M_BITMAPDATA, [M_BITMAPDATA->m_cocoaNSBitmapImageRep bitmapData]);
M_BITMAPDATA->m_ok = true; M_BITMAPDATA->m_ok = true;
@@ -345,7 +350,7 @@ bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type)
M_BITMAPDATA->m_ok = true; M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_numColors = 0; M_BITMAPDATA->m_numColors = 0;
M_BITMAPDATA->m_quality = 0; M_BITMAPDATA->m_quality = 0;
M_BITMAPDATA->m_cocoaNSBitmapImageRep = [imageRep retain]; M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(imageRep);
M_BITMAPDATA->m_bitmapMask = NULL; M_BITMAPDATA->m_bitmapMask = NULL;
return true; return true;
} }
@@ -377,7 +382,7 @@ bool wxBitmap::Create(NSBitmapImageRep *imageRep)
M_BITMAPDATA->m_ok = true; M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_numColors = 0; M_BITMAPDATA->m_numColors = 0;
M_BITMAPDATA->m_quality = 0; M_BITMAPDATA->m_quality = 0;
M_BITMAPDATA->m_cocoaNSBitmapImageRep = [imageRep retain]; M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(imageRep);
M_BITMAPDATA->m_bitmapMask = NULL; M_BITMAPDATA->m_bitmapMask = NULL;
return true; return true;
} }
@@ -410,12 +415,12 @@ bool wxBitmap::CopyFromIcon(const wxIcon& icon)
NSRect imageRect; NSRect imageRect;
imageRect.origin.x = imageRect.origin.y = 0.0; imageRect.origin.x = imageRect.origin.y = 0.0;
imageRect.size = [icon.GetNSImage() size]; imageRect.size = [icon.GetNSImage() size];
NSBitmapImageRep *newBitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect]; NSBitmapImageRep *newBitmapRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect] autorelease];
[icon.GetNSImage() unlockFocus]; [icon.GetNSImage() unlockFocus];
if(!newBitmapRep) if(!newBitmapRep)
return false; return false;
m_refData = new wxBitmapRefData; m_refData = new wxBitmapRefData;
M_BITMAPDATA->m_cocoaNSBitmapImageRep = newBitmapRep; M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(newBitmapRep);
M_BITMAPDATA->m_width = [newBitmapRep pixelsWide]; M_BITMAPDATA->m_width = [newBitmapRep pixelsWide];
M_BITMAPDATA->m_height = [newBitmapRep pixelsHigh]; M_BITMAPDATA->m_height = [newBitmapRep pixelsHigh];
M_BITMAPDATA->m_depth = [newBitmapRep bitsPerSample]*[newBitmapRep samplesPerPixel]; M_BITMAPDATA->m_depth = [newBitmapRep bitsPerSample]*[newBitmapRep samplesPerPixel];
@@ -474,6 +479,7 @@ wxImage wxBitmap::ConvertToImage() const
bool wxBitmap::CreateFromImage(const wxImage& image, int depth) bool wxBitmap::CreateFromImage(const wxImage& image, int depth)
{ {
wxAutoNSAutoreleasePool pool;
UnRef(); UnRef();
wxCHECK_MSG(image.Ok(), false, wxT("invalid image")); wxCHECK_MSG(image.Ok(), false, wxT("invalid image"));
@@ -483,7 +489,7 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth)
M_BITMAPDATA->m_width = image.GetWidth(); M_BITMAPDATA->m_width = image.GetWidth();
M_BITMAPDATA->m_height = image.GetHeight(); M_BITMAPDATA->m_height = image.GetHeight();
NSBitmapImageRep *bitmapImage = [[NSBitmapImageRep alloc] NSBitmapImageRep *bitmapImage = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: NULL initWithBitmapDataPlanes: NULL
pixelsWide: image.GetWidth() pixelsWide: image.GetWidth()
pixelsHigh: image.GetHeight() pixelsHigh: image.GetHeight()
@@ -493,7 +499,7 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth)
isPlanar: NO isPlanar: NO
colorSpaceName: NSCalibratedRGBColorSpace colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: image.GetWidth()*3 bytesPerRow: image.GetWidth()*3
bitsPerPixel: 0]; bitsPerPixel: 0] autorelease];
// TODO: Specify bytesPerRow:0 and then use [bitmapImage bytesPerRow] // TODO: Specify bytesPerRow:0 and then use [bitmapImage bytesPerRow]
// so that the rows are aligned suitably for altivec by the OS (Tiger) // so that the rows are aligned suitably for altivec by the OS (Tiger)
@@ -504,7 +510,7 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth)
M_BITMAPDATA->m_ok = true; M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_numColors = 0; M_BITMAPDATA->m_numColors = 0;
M_BITMAPDATA->m_quality = 0; M_BITMAPDATA->m_quality = 0;
M_BITMAPDATA->m_cocoaNSBitmapImageRep = bitmapImage; M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(bitmapImage);
M_BITMAPDATA->m_bitmapMask = new wxMask(*this,wxColour(image.GetMaskRed(),image.GetMaskGreen(),image.GetMaskBlue())); M_BITMAPDATA->m_bitmapMask = new wxMask(*this,wxColour(image.GetMaskRed(),image.GetMaskGreen(),image.GetMaskBlue()));
return true; return true;
} }
@@ -583,13 +589,13 @@ wxMask::wxMask(const wxBitmap& bitmap)
// Copy constructor // Copy constructor
wxMask::wxMask(const wxMask& src) wxMask::wxMask(const wxMask& src)
: wxObject(src) : wxObject(src)
, m_cocoaNSBitmapImageRep([src.m_cocoaNSBitmapImageRep retain]) , m_cocoaNSBitmapImageRep(wxGCSafeRetain(src.m_cocoaNSBitmapImageRep))
{ {
} }
wxMask::~wxMask() wxMask::~wxMask()
{ {
[m_cocoaNSBitmapImageRep release]; wxGCSafeRelease(m_cocoaNSBitmapImageRep);
} }
// Create a mask from a mono bitmap (copies the bitmap). // Create a mask from a mono bitmap (copies the bitmap).
@@ -724,6 +730,6 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
{ wxCHECK_MSG(false,false,wxT("Unimplemented pixel format")); } { wxCHECK_MSG(false,false,wxT("Unimplemented pixel format")); }
// maskRep was autoreleased in case we had to exit quickly // maskRep was autoreleased in case we had to exit quickly
m_cocoaNSBitmapImageRep = [maskRep retain]; m_cocoaNSBitmapImageRep = wxGCSafeRetain(maskRep);
return true; return true;
} }

View File

@@ -18,6 +18,7 @@
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/cocoa/autorelease.h" #include "wx/cocoa/autorelease.h"
#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSColor.h> #import <AppKit/NSColor.h>
@@ -38,7 +39,7 @@ wxColour::wxColour (const wxColour& col)
, m_blue(col.m_blue) , m_blue(col.m_blue)
, m_alpha(col.m_alpha) , m_alpha(col.m_alpha)
{ {
[m_cocoaNSColor retain]; wxGCSafeRetain(m_cocoaNSColor);
} }
wxColour::wxColour( WX_NSColor aColor ) wxColour::wxColour( WX_NSColor aColor )
@@ -49,18 +50,17 @@ wxColour::wxColour( WX_NSColor aColor )
wxColour& wxColour::operator =(const wxColour& col) wxColour& wxColour::operator =(const wxColour& col)
{ {
m_cocoaNSColor = col.m_cocoaNSColor; m_cocoaNSColor = wxGCSafeRetain(col.m_cocoaNSColor);
m_red = col.m_red; m_red = col.m_red;
m_green = col.m_green; m_green = col.m_green;
m_blue = col.m_blue; m_blue = col.m_blue;
m_alpha = col.m_alpha; m_alpha = col.m_alpha;
[m_cocoaNSColor retain];
return *this; return *this;
} }
wxColour::~wxColour () wxColour::~wxColour ()
{ {
[m_cocoaNSColor release]; wxGCSafeRelease(m_cocoaNSColor);
} }
void wxColour::InitRGBA(unsigned char r, void wxColour::InitRGBA(unsigned char r,
@@ -69,8 +69,8 @@ void wxColour::InitRGBA(unsigned char r,
unsigned char a) unsigned char a)
{ {
wxAutoNSAutoreleasePool pool; wxAutoNSAutoreleasePool pool;
[m_cocoaNSColor release]; wxGCSafeRelease(m_cocoaNSColor);
m_cocoaNSColor = [[NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a/255.0] retain]; m_cocoaNSColor = wxGCSafeRetain([NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a/255.0]);
m_red = r; m_red = r;
m_green = g; m_green = g;
m_blue = b; m_blue = b;
@@ -79,8 +79,8 @@ void wxColour::InitRGBA(unsigned char r,
void wxColour::Set( WX_NSColor aColor ) void wxColour::Set( WX_NSColor aColor )
{ {
[aColor retain]; wxGCSafeRetain(aColor);
[m_cocoaNSColor release]; wxGCSafeRelease(m_cocoaNSColor);
m_cocoaNSColor = aColor; m_cocoaNSColor = aColor;
/* Make a temporary color in RGB format and get the values. Note that /* Make a temporary color in RGB format and get the values. Note that

View File

@@ -20,6 +20,7 @@
#include "wx/cocoa/autorelease.h" #include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h" #include "wx/cocoa/string.h"
#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSBezierPath.h> #import <AppKit/NSBezierPath.h>
#import <AppKit/NSTextStorage.h> #import <AppKit/NSTextStorage.h>
@@ -74,11 +75,16 @@ inline void CocoaSetPenForNSBezierPath(wxPen &pen, NSBezierPath *bezpath)
void wxDC::CocoaInitializeTextSystem() void wxDC::CocoaInitializeTextSystem()
{ {
wxAutoNSAutoreleasePool pool;
wxASSERT_MSG(!sm_cocoaNSTextStorage && !sm_cocoaNSLayoutManager && !sm_cocoaNSTextContainer,wxT("Text system already initalized! BAD PROGRAMMER!")); wxASSERT_MSG(!sm_cocoaNSTextStorage && !sm_cocoaNSLayoutManager && !sm_cocoaNSTextContainer,wxT("Text system already initalized! BAD PROGRAMMER!"));
sm_cocoaNSTextStorage = [[NSTextStorage alloc] init]; // FIXME: Never released
sm_cocoaNSTextStorage = wxGCSafeRetain([[[NSTextStorage alloc] init] autorelease]);
// FIXME: Never released
sm_cocoaNSLayoutManager = wxGCSafeRetain([[[NSLayoutManager alloc] init] autorelease]);
sm_cocoaNSLayoutManager = [[NSLayoutManager alloc] init];
[sm_cocoaNSTextStorage addLayoutManager:sm_cocoaNSLayoutManager]; [sm_cocoaNSTextStorage addLayoutManager:sm_cocoaNSLayoutManager];
// NSTextStorage retains NSLayoutManager, but so do we // NSTextStorage retains NSLayoutManager, but so do we
// [sm_cocoaNSLayoutManager release]; [sm_cocoaNSLayoutManager retain]; // [sm_cocoaNSLayoutManager release]; [sm_cocoaNSLayoutManager retain];
@@ -86,7 +92,8 @@ void wxDC::CocoaInitializeTextSystem()
// NOTE: initWithContainerSize is the designated initializer, but the // NOTE: initWithContainerSize is the designated initializer, but the
// Apple CircleView sample gets away with just calling init, which // Apple CircleView sample gets away with just calling init, which
// is all we really need for our purposes. // is all we really need for our purposes.
sm_cocoaNSTextContainer = [[NSTextContainer alloc] init]; // FIXME: Never released
sm_cocoaNSTextContainer = wxGCSafeRetain([[[NSTextContainer alloc] init] autorelease]);
[sm_cocoaNSLayoutManager addTextContainer:sm_cocoaNSTextContainer]; [sm_cocoaNSLayoutManager addTextContainer:sm_cocoaNSTextContainer];
// NSLayoutManager retains NSTextContainer, but so do we // NSLayoutManager retains NSTextContainer, but so do we
// [sm_cocoaNSTextContainer release]; [sm_cocoaNSTextContainer retain]; // [sm_cocoaNSTextContainer release]; [sm_cocoaNSTextContainer retain];

View File

@@ -17,6 +17,8 @@
#include "wx/colour.h" #include "wx/colour.h"
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSColor.h> #import <AppKit/NSColor.h>
// ======================================================================== // ========================================================================
@@ -131,13 +133,13 @@ inline wxPenRefData::wxPenRefData(const wxPenRefData& data)
m_nbDash = data.m_nbDash; m_nbDash = data.m_nbDash;
m_dash = data.m_dash; m_dash = data.m_dash;
m_stipple = data.m_stipple; m_stipple = data.m_stipple;
m_cocoaNSColor = [data.m_cocoaNSColor retain]; m_cocoaNSColor = wxGCSafeRetain(data.m_cocoaNSColor);
m_cocoaDash = NULL; m_cocoaDash = NULL;
} }
inline void wxPenRefData::FreeCocoaNSColor() inline void wxPenRefData::FreeCocoaNSColor()
{ {
[m_cocoaNSColor release]; wxGCSafeRelease(m_cocoaNSColor);
m_cocoaNSColor = nil; m_cocoaNSColor = nil;
} }
@@ -154,7 +156,7 @@ inline WX_NSColor wxPenRefData::GetNSColor()
switch( m_style ) switch( m_style )
{ {
case wxTRANSPARENT: case wxTRANSPARENT:
m_cocoaNSColor = [[NSColor clearColor] retain]; m_cocoaNSColor = wxGCSafeRetain([NSColor clearColor]);
break; break;
case wxSTIPPLE: case wxSTIPPLE:
// wxBitmap isn't implemented yet // wxBitmap isn't implemented yet
@@ -179,6 +181,7 @@ inline WX_NSColor wxPenRefData::GetNSColor()
if(!colour_NSColor) if(!colour_NSColor)
colour_NSColor = [NSColor clearColor]; colour_NSColor = [NSColor clearColor];
m_cocoaNSColor = [colour_NSColor copyWithZone:nil]; m_cocoaNSColor = [colour_NSColor copyWithZone:nil];
[wxGCSafeRetain(m_cocoaNSColor) release]; // retain in GC. no change in RR.
break; break;
} }
} }

View File

@@ -32,6 +32,7 @@
#include "wx/cocoa/autorelease.h" #include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h" #include "wx/cocoa/string.h"
#include "wx/cocoa/ObjcRef.h"
#include "wx/cocoa/objc/NSView.h" #include "wx/cocoa/objc/NSView.h"
#include "wx/cocoa/objc/NSWindow.h" #include "wx/cocoa/objc/NSWindow.h"
@@ -190,8 +191,8 @@ void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow)
bool need_debug = cocoaNSWindow || m_cocoaNSWindow; bool need_debug = cocoaNSWindow || m_cocoaNSWindow;
if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxTopLevelWindowCocoa=%p::SetNSWindow [m_cocoaNSWindow=%p retainCount]=%d"),this,m_cocoaNSWindow,[m_cocoaNSWindow retainCount]); if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxTopLevelWindowCocoa=%p::SetNSWindow [m_cocoaNSWindow=%p retainCount]=%d"),this,m_cocoaNSWindow,[m_cocoaNSWindow retainCount]);
DisassociateNSWindow(m_cocoaNSWindow); DisassociateNSWindow(m_cocoaNSWindow);
[cocoaNSWindow retain]; wxGCSafeRetain(cocoaNSWindow);
[m_cocoaNSWindow release]; wxGCSafeRelease(m_cocoaNSWindow);
m_cocoaNSWindow = cocoaNSWindow; m_cocoaNSWindow = cocoaNSWindow;
// NOTE: We are no longer using posing so we won't get events on the // NOTE: We are no longer using posing so we won't get events on the
// window's view unless it was explicitly created as the wx view class. // window's view unless it was explicitly created as the wx view class.

View File

@@ -24,6 +24,7 @@
#include "wx/cocoa/string.h" #include "wx/cocoa/string.h"
#include "wx/cocoa/trackingrectmanager.h" #include "wx/cocoa/trackingrectmanager.h"
#include "wx/mac/corefoundation/cfref.h" #include "wx/mac/corefoundation/cfref.h"
#include "wx/cocoa/ObjcRef.h"
#import <Foundation/NSArray.h> #import <Foundation/NSArray.h>
#import <Foundation/NSRunLoop.h> #import <Foundation/NSRunLoop.h>
@@ -1116,8 +1117,8 @@ void wxWindowCocoa::SetNSView(WX_NSView cocoaNSView)
bool need_debug = cocoaNSView || m_cocoaNSView; bool need_debug = cocoaNSView || m_cocoaNSView;
if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d"),this,m_cocoaNSView,[m_cocoaNSView retainCount]); if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d"),this,m_cocoaNSView,[m_cocoaNSView retainCount]);
DisassociateNSView(m_cocoaNSView); DisassociateNSView(m_cocoaNSView);
[cocoaNSView retain]; wxGCSafeRetain(cocoaNSView);
[m_cocoaNSView release]; wxGCSafeRelease(m_cocoaNSView);
m_cocoaNSView = cocoaNSView; m_cocoaNSView = cocoaNSView;
AssociateNSView(m_cocoaNSView); AssociateNSView(m_cocoaNSView);
if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d"),this,cocoaNSView,[cocoaNSView retainCount]); if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d"),this,cocoaNSView,[cocoaNSView retainCount]);