ShowModalWindow в Objective-C приведет к утечке памяти при включенном GC? - PullRequest
0 голосов
/ 18 марта 2011

Мое приложение работает с включенным GC.

Утечка инструмента всегда говорит мне, что эта строка кода имеет 100% утечку памяти:

[NSApp runModalForWindow:[theWindowController window]];

Я понятия не имею, почему.

И вот весь код приложения:

/* delegate */

#import "m_ModalWindowAppDelegate.h"
#import "modalWindowController.h"

@implementation m_ModalWindowAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application 
}

- (IBAction) openModalWindowButtonClicked: (id) sender
{
    modalWindowController *theWindowController = [[modalWindowController alloc] init];

    [NSApp runModalForWindow:[theWindowController window]];
    [NSApp endSheet: [theWindowController window]];
    [[theWindowController window] orderOut:self];
}

@end


/* modalWindowController */

#import "modalWindowController.h"


@implementation modalWindowController

- (id) init
{
    self = [self initWithWindowNibName:@"modalWindow"];

    return self;
}


- (IBAction) closeButtonClicked:(id)sender
{
    [NSApp stopModal];
}

@end

1 Ответ

0 голосов
/ 18 марта 2011

Утечка фактически на одну строку выше этой:

modalWindowController *theWindowController = [[modalWindowController alloc] init];

Вы выделяете modalWindowController и назначаете его локальному указателю.Когда метод заканчивается, указатель выходит из области видимости, но вы никогда не освобождаете выделенный объект.В этот момент у вас больше нет возможности ссылаться на объект (больше нет указателя), поэтому вы не сможете его освободить в будущем.Это утечка.

...