Fixed 2680 - OSX: Replace NSAutoreleasePool with @autoreleasepool

Tim McDaniel

This patch replaces all use of NSAutoreleasePool with the Apple recommended @autoreleasepool.  @autoreleasepool is supposedly more efficient, and since it is scope based it can't be accidentally not released.
This commit is contained in:
Sam Lantinga 2014-08-17 15:07:00 -07:00
parent 5e50180415
commit d1cc47b337
8 changed files with 34 additions and 78 deletions

View File

@ -33,6 +33,7 @@
Also, note the bundle layouts are different for iPhone and Mac.
*/
FILE* SDL_OpenFPFromBundleOrFallback(const char *file, const char *mode)
{ @autoreleasepool
{
FILE* fp = NULL;
@ -41,9 +42,6 @@ FILE* SDL_OpenFPFromBundleOrFallback(const char *file, const char *mode)
return fopen(file, mode);
}
NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init];
NSFileManager* file_manager = [NSFileManager defaultManager];
NSString* resource_path = [[NSBundle mainBundle] resourcePath];
@ -57,10 +55,8 @@ FILE* SDL_OpenFPFromBundleOrFallback(const char *file, const char *mode)
fp = fopen(file, mode);
}
[autorelease_pool drain];
return fp;
}
}}
#endif /* __MACOSX__ */

View File

@ -35,8 +35,8 @@
char *
SDL_GetBasePath(void)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSBundle *bundle = [NSBundle mainBundle];
const char* baseType = [[[bundle infoDictionary] objectForKey:@"SDL_FILESYSTEM_BASE_DIR_TYPE"] UTF8String];
const char *base = NULL;
@ -62,14 +62,13 @@ SDL_GetBasePath(void)
}
}
[pool release];
return retval;
}
}}
char *
SDL_GetPrefPath(const char *org, const char *app)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *array = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
char *retval = NULL;
@ -96,9 +95,8 @@ SDL_GetPrefPath(const char *org, const char *app)
}
}
[pool release];
return retval;
}
}}
#endif /* SDL_FILESYSTEM_COCOA */

View File

@ -37,34 +37,28 @@ GetTextFormat(_THIS)
int
Cocoa_SetClipboardText(_THIS, const char *text)
{ @autoreleasepool
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
NSAutoreleasePool *pool;
NSPasteboard *pasteboard;
NSString *format = GetTextFormat(_this);
pool = [[NSAutoreleasePool alloc] init];
pasteboard = [NSPasteboard generalPasteboard];
data->clipboard_count = [pasteboard declareTypes:[NSArray arrayWithObject:format] owner:nil];
[pasteboard setString:[NSString stringWithUTF8String:text] forType:format];
[pool release];
return 0;
}
}}
char *
Cocoa_GetClipboardText(_THIS)
{ @autoreleasepool
{
NSAutoreleasePool *pool;
NSPasteboard *pasteboard;
NSString *format = GetTextFormat(_this);
NSString *available;
char *text;
pool = [[NSAutoreleasePool alloc] init];
pasteboard = [NSPasteboard generalPasteboard];
available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:format]];
if ([available isEqualToString:format]) {
@ -82,10 +76,8 @@ Cocoa_GetClipboardText(_THIS)
text = SDL_strdup("");
}
[pool release];
return text;
}
}}
SDL_bool
Cocoa_HasClipboardText(_THIS)
@ -101,13 +93,11 @@ Cocoa_HasClipboardText(_THIS)
void
Cocoa_CheckClipboardUpdate(struct SDL_VideoData * data)
{ @autoreleasepool
{
NSAutoreleasePool *pool;
NSPasteboard *pasteboard;
NSInteger count;
pool = [[NSAutoreleasePool alloc] init];
pasteboard = [NSPasteboard generalPasteboard];
count = [pasteboard changeCount];
if (count != data->clipboard_count) {
@ -116,9 +106,7 @@ Cocoa_CheckClipboardUpdate(struct SDL_VideoData * data)
}
data->clipboard_count = count;
}
[pool release];
}
}}
#endif /* SDL_VIDEO_DRIVER_COCOA */

View File

@ -248,17 +248,16 @@ CreateApplicationMenus(void)
void
Cocoa_RegisterApp(void)
{ @autoreleasepool
{
/* This can get called more than once! Be careful what you initialize! */
ProcessSerialNumber psn;
NSAutoreleasePool *pool;
if (!GetCurrentProcess(&psn)) {
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
SetFrontProcess(&psn);
}
pool = [[NSAutoreleasePool alloc] init];
if (NSApp == nil) {
[SDLApplication sharedApplication];
SDL_assert(NSApp != nil);
@ -287,14 +286,12 @@ Cocoa_RegisterApp(void)
appDelegate->seenFirstActivate = YES;
}
}
[pool release];
}
}}
void
Cocoa_PumpEvents(_THIS)
{ @autoreleasepool
{
NSAutoreleasePool *pool;
/* Update activity every 30 seconds to prevent screensaver */
if (_this->suspend_screensaver) {
SDL_VideoData *data = (SDL_VideoData *)_this->driverdata;
@ -306,7 +303,6 @@ Cocoa_PumpEvents(_THIS)
}
}
pool = [[NSAutoreleasePool alloc] init];
for ( ; ; ) {
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ];
if ( event == nil ) {
@ -338,8 +334,7 @@ Cocoa_PumpEvents(_THIS)
/* Pass through to NSApp to make sure everything stays in sync */
[NSApp sendEvent:event];
}
[pool release];
}
}}
#endif /* SDL_VIDEO_DRIVER_COCOA */

View File

@ -479,9 +479,9 @@ Cocoa_InitKeyboard(_THIS)
void
Cocoa_StartTextInput(_THIS)
{ @autoreleasepool
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDL_Window *window = SDL_GetKeyboardFocus();
NSWindow *nswindow = nil;
if (window) {
@ -506,23 +506,20 @@ Cocoa_StartTextInput(_THIS)
[parentView addSubview: data->fieldEdit];
[nswindow makeFirstResponder: data->fieldEdit];
}
[pool release];
}
}}
void
Cocoa_StopTextInput(_THIS)
{ @autoreleasepool
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
if (data && data->fieldEdit) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[data->fieldEdit removeFromSuperview];
[data->fieldEdit release];
data->fieldEdit = nil;
[pool release];
}
}
}}
void
Cocoa_SetTextInputRect(_THIS, SDL_Rect *rect)

View File

@ -79,11 +79,10 @@
/* Display a Cocoa message box */
int
Cocoa_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
{ @autoreleasepool
{
Cocoa_RegisterApp();
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSAlert* alert = [[[NSAlert alloc] init] autorelease];
if (messageboxdata->flags & SDL_MESSAGEBOX_ERROR) {
@ -125,10 +124,8 @@ Cocoa_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
returnValue = SDL_SetError("Did not get a valid `clicked button' id: %ld", (long)clicked);
}
[pool release];
return returnValue;
}
}}
#endif /* SDL_VIDEO_DRIVER_COCOA */

View File

@ -214,8 +214,8 @@ Cocoa_GetDisplayName(CGDirectDisplayID displayID)
void
Cocoa_InitModes(_THIS)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CGDisplayErr result;
CGDirectDisplayID *displays;
CGDisplayCount numDisplays;
@ -224,7 +224,6 @@ Cocoa_InitModes(_THIS)
result = CGGetOnlineDisplayList(0, NULL, &numDisplays);
if (result != kCGErrorSuccess) {
CG_SetError("CGGetOnlineDisplayList()", result);
[pool release];
return;
}
displays = SDL_stack_alloc(CGDirectDisplayID, numDisplays);
@ -232,7 +231,6 @@ Cocoa_InitModes(_THIS)
if (result != kCGErrorSuccess) {
CG_SetError("CGGetOnlineDisplayList()", result);
SDL_stack_free(displays);
[pool release];
return;
}
@ -297,8 +295,7 @@ Cocoa_InitModes(_THIS)
}
}
SDL_stack_free(displays);
[pool release];
}
}}
int
Cocoa_GetDisplayBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect)

View File

@ -66,8 +66,8 @@
static SDL_Cursor *
Cocoa_CreateDefaultCursor()
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSCursor *nscursor;
SDL_Cursor *cursor = NULL;
@ -81,15 +81,13 @@ Cocoa_CreateDefaultCursor()
}
}
[pool release];
return cursor;
}
}}
static SDL_Cursor *
Cocoa_CreateCursor(SDL_Surface * surface, int hot_x, int hot_y)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSImage *nsimage;
NSCursor *nscursor = NULL;
SDL_Cursor *cursor = NULL;
@ -108,15 +106,13 @@ Cocoa_CreateCursor(SDL_Surface * surface, int hot_x, int hot_y)
}
}
[pool release];
return cursor;
}
}}
static SDL_Cursor *
Cocoa_CreateSystemCursor(SDL_SystemCursor id)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSCursor *nscursor = NULL;
SDL_Cursor *cursor = NULL;
@ -169,28 +165,23 @@ Cocoa_CreateSystemCursor(SDL_SystemCursor id)
}
}
[pool release];
return cursor;
}
}}
static void
Cocoa_FreeCursor(SDL_Cursor * cursor)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSCursor *nscursor = (NSCursor *)cursor->driverdata;
[nscursor release];
SDL_free(cursor);
[pool release];
}
}}
static int
Cocoa_ShowCursor(SDL_Cursor * cursor)
{ @autoreleasepool
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDL_VideoDevice *device = SDL_GetVideoDevice();
SDL_Window *window = (device ? device->windows : NULL);
for (; window != NULL; window = window->next) {
@ -201,11 +192,8 @@ Cocoa_ShowCursor(SDL_Cursor * cursor)
waitUntilDone:NO];
}
}
[pool release];
return 0;
}
}}
static void
Cocoa_WarpMouseGlobal(int x, int y)