From d1cc47b337adadf3f34ae3bcd585ef3e27258073 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 17 Aug 2014 15:07:00 -0700 Subject: [PATCH] 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. --- src/file/cocoa/SDL_rwopsbundlesupport.m | 8 ++---- src/filesystem/cocoa/SDL_sysfilesystem.m | 10 +++----- src/video/cocoa/SDL_cocoaclipboard.m | 24 +++++------------- src/video/cocoa/SDL_cocoaevents.m | 13 +++------- src/video/cocoa/SDL_cocoakeyboard.m | 11 +++----- src/video/cocoa/SDL_cocoamessagebox.m | 7 ++---- src/video/cocoa/SDL_cocoamodes.m | 7 ++---- src/video/cocoa/SDL_cocoamouse.m | 32 ++++++++---------------- 8 files changed, 34 insertions(+), 78 deletions(-) diff --git a/src/file/cocoa/SDL_rwopsbundlesupport.m b/src/file/cocoa/SDL_rwopsbundlesupport.m index f6a65a99a..1ae399c2d 100644 --- a/src/file/cocoa/SDL_rwopsbundlesupport.m +++ b/src/file/cocoa/SDL_rwopsbundlesupport.m @@ -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__ */ diff --git a/src/filesystem/cocoa/SDL_sysfilesystem.m b/src/filesystem/cocoa/SDL_sysfilesystem.m index adcebd68b..dab51c501 100644 --- a/src/filesystem/cocoa/SDL_sysfilesystem.m +++ b/src/filesystem/cocoa/SDL_sysfilesystem.m @@ -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 */ diff --git a/src/video/cocoa/SDL_cocoaclipboard.m b/src/video/cocoa/SDL_cocoaclipboard.m index c2f3be73c..bf3b90955 100644 --- a/src/video/cocoa/SDL_cocoaclipboard.m +++ b/src/video/cocoa/SDL_cocoaclipboard.m @@ -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 */ diff --git a/src/video/cocoa/SDL_cocoaevents.m b/src/video/cocoa/SDL_cocoaevents.m index 3474d159a..13aeb4502 100644 --- a/src/video/cocoa/SDL_cocoaevents.m +++ b/src/video/cocoa/SDL_cocoaevents.m @@ -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 */ diff --git a/src/video/cocoa/SDL_cocoakeyboard.m b/src/video/cocoa/SDL_cocoakeyboard.m index 53f58866c..c621182b8 100644 --- a/src/video/cocoa/SDL_cocoakeyboard.m +++ b/src/video/cocoa/SDL_cocoakeyboard.m @@ -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) diff --git a/src/video/cocoa/SDL_cocoamessagebox.m b/src/video/cocoa/SDL_cocoamessagebox.m index 2ed7d9057..5a8f78050 100644 --- a/src/video/cocoa/SDL_cocoamessagebox.m +++ b/src/video/cocoa/SDL_cocoamessagebox.m @@ -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 */ diff --git a/src/video/cocoa/SDL_cocoamodes.m b/src/video/cocoa/SDL_cocoamodes.m index a98d376ff..5f460589e 100644 --- a/src/video/cocoa/SDL_cocoamodes.m +++ b/src/video/cocoa/SDL_cocoamodes.m @@ -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) diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index f0480603d..8b933c27d 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -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)