0

我在我的項目中有一個UIPopoverController與包含UIDatePicker作爲其內容的ViewController。UIPopoverController內存沒有得到釋放後關閉ARC

單擊按鈕時會顯示彈出窗口。彈出&其內容得到分配後,應用程序內存增加約2.5 MiB。

由於我在內存中有兩個獨立的popover實例,它增加了大約5mb。

我的問題是彈出被取消後,它的內存永遠不會被釋放。另外,由於我啓用了ARC,我無法手動釋放它。

任何人都可以請指導我如何釋放內存時使用弧彈出取消解除。

以下是代碼:

-(IBAction)btnDateSelect:(id)sender 
{ 

    CGRect popoverRect; 
    appDelegate.objDtPicker = [[ViewDatePicker alloc]init]; 
    appDelegate.objDtPicker.delegate = self; 

    self.popOver = [[UIPopoverController alloc]initWithContentViewController: 
    appDelegate.objDtPicker]; 
    popOver.delegate = self; 

    if ([sender tag] == 70) 
    { 
     popoverRect = [self.view convertRect:[btnFromDate frame] 
            fromView:[btnFromDate superview]]; 
     bFromDate = TRUE; 
     bToDate = FALSE; 

    } 
    else 
    { 
     bFromDate = FALSE; 
     bToDate = TRUE; 
     popoverRect = [self.view convertRect:[btnToDate frame] 
            fromView:[btnToDate superview]]; 
    } 


    popOver.popoverContentSize=CGSizeMake(400.0,216.0); 
    [popOver presentPopoverFromRect:popoverRect inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionDown 
          animated:NO]; 
} 

回答

2

我猜self.popOver是一個強大的屬性?它由這個屬性保留。當您關閉視圖時,可以將此屬性設置爲零(使用委託方法)。

+0

謝謝保羅。實際上,我用(nonatomic,retain)來設置它的屬性。我在'popoverControllerDidDismissPopover'委託方法中設置了'self.popOver = nil',但仍然沒有釋放內存。 – niks

+0

保留和強壯是一回事。 –

+0

你確定'popoverControllerDidDismissPopover'被調用嗎? –

0

你確定問題是popover沒有被釋放嗎?這可能是系統正在緩存圖像或其他數據。內存警告後額外的內存使用情況會消失嗎? (您可以在模擬器中模擬其中的一種)。如果在內存警告後額外的內存使用量消失,這可能不是問題。

你可能會嘗試使用「Allocations」或「Leaks」工具來運行你的應用程序,它可以讓你知道popover是否真正被釋放,以及實際佔用5 MB的東西。