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/trunk@51585 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott
2008-02-08 00:35:39 +00:00
parent 6ecc2922da
commit 6a5c31c285
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>
@@ -76,6 +77,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;
@@ -83,13 +86,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;
@@ -195,8 +198,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;
} }
@@ -293,6 +296,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;
@@ -302,7 +307,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
@@ -313,7 +318,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;
@@ -342,7 +347,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;
} }
@@ -374,7 +379,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;
} }
@@ -407,12 +412,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];
@@ -471,6 +476,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"));
@@ -480,7 +486,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()
@@ -490,7 +496,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)
@@ -501,7 +507,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;
} }
@@ -576,13 +582,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).
@@ -717,6 +723,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>
@@ -75,11 +76,16 @@ inline void CocoaSetPenForNSBezierPath(wxPen &pen, NSBezierPath *bezpath)
void wxCocoaDCImpl::CocoaInitializeTextSystem() void wxCocoaDCImpl::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];
@@ -87,7 +93,8 @@ void wxCocoaDCImpl::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>
// ======================================================================== // ========================================================================
@@ -133,13 +135,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;
} }
@@ -156,7 +158,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
@@ -181,6 +183,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

@@ -26,6 +26,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>
@@ -1109,8 +1110,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]);