macosx: fix VLC object leaks
authorDerk-Jan Hartman <hartman@videolan.org>
Fri, 3 Apr 2009 11:06:30 +0000 (13:06 +0200)
committerDerk-Jan Hartman <hartman@videolan.org>
Fri, 3 Apr 2009 11:11:07 +0000 (13:11 +0200)
When building the menu's, autorelease the VLCAutoGeneratedMenu's instead of retaining. The NSMenuItem will do a retain/release for the live of the object in the NSMenuItem and thus once the menu's are done using the object, their retaincount will be 0 and they will be dealloc'ed at the end of the EventLoop. (An eventloop is One run of GUI updates you might say).

modules/gui/macosx/controls.m

index c6b9f67..bf953c0 100644 (file)
     case VLC_VAR_VOID:
         o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
                 andValue: val ofType: i_type];
-        [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
+        [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data autorelease]]];
         break;
 
     case VLC_VAR_BOOL:
         o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
                 andValue: val ofType: i_type];
-        [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
+        [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data autorelease]]];
         if( !( i_type & VLC_VAR_ISCOMMAND ) )
             [o_mi setState: val.b_bool ? TRUE : FALSE ];
         break;
             o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""];
             o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: strdup(psz_variable) ofObject: p_object
                     andValue: another_val ofType: i_type];
-            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
+            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[o_data autorelease]]];
             [o_lmi setTarget: self];
 
             if( !strcmp( val.psz_string, val_list.p_list->p_values[i].psz_string ) && !( i_type & VLC_VAR_ISCOMMAND ) )
                                  [NSString stringWithFormat: @"%d",
                                  val_list.p_list->p_values[i].i_int];
 
-            o_lmi = [[o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""] retain ];
+            o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""];
             o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: strdup(psz_variable) ofObject: p_object
                     andValue: val_list.p_list->p_values[i] ofType: i_type];
-            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[ o_data retain]]];
+            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[ o_data autorelease]]];
             [o_lmi setTarget: self];
 
             if( val_list.p_list->p_values[i].i_int == val.i_int && !( i_type & VLC_VAR_ISCOMMAND ) )