NSRunAlertPanel导致内存泄漏

时间:2013-07-09 13:05:13

标签: objective-c macos cocoa

在我的应用程序中,我使用NSRunAlertPanel来确认用户的退出。

当我在仪器下运行我的应用程序以检测内存泄漏时,它会在以下代码中显示内存泄漏。

 -(void)CloseWithConfirm
 {
     int answer;
     //Here, it is showing memory leak.
     answer = NSRunAlertPanel (@"Quit Confirmation", @"Do you want to quit?", @"Yes", @"No", @"Cancel"); 

     if(NSAlertDefaultReturn == answer)
          [self close];          
 }

有什么线索吗?

1 个答案:

答案 0 :(得分:1)

NSRunAlertPanel实际上正在调用runModalForWindow:并创建一个模态事件循环。即使按下模态窗口上的确认按钮也会关闭窗口,但它不会破坏创建的模态循环。在你的return if语句中尝试这样做:

if (NSAlertDefaultReturn == answer) {
   [NSApp stopModal];
   [self close];
}

使用此代码查看内存泄漏是否停止。

FWIW,因为当这个方法退出时你正在关闭应用程序,最后一个内存泄漏可能不会影响太多。